仅发送图像/视频文件时出错

Posted

技术标签:

【中文标题】仅发送图像/视频文件时出错【英文标题】:Error Sending ONLY Image/Video file 【发布时间】:2013-08-08 18:24:17 【问题描述】:

我正在尝试通过 wifi 在我的电脑和安卓设备之间共享文件。奇怪的是文本和音频文件正在完美传输,而图像和视频文件却无法渲染。 这是主要的代码:

发件人:

BufferedOutputStream writer = new BufferedOutputStream(client.getOutputStream());
InputStream stream = new FileInputStream(file);
while ((read = stream.read(buffer)) != -1)
    writer.write(buffer, 0, read);

接收者:

BufferedInputStream input = new BufferedInputStream(client.getInputStream());
OutputStream outputStream = new FileOutputStream(file, true);
while (!store.complete) 
    read = input.read(buffer, 0 , MAX_SIZE_OF_BUFFER);
    String data = new String(buffer);
    // Need to do some data manipulation (like removing a string which i appended
    // while sending )
    outputStream.write(data.getBytes());

注意:即使接收端的图像/视频文件大小与发送的文件大小相同,仍然无法渲染。

提前致谢!! :)

【问题讨论】:

【参考方案1】:

您不能假设将 byte[] 转换为 String,然后将其转换回 byte[] 会得到原始 byte[]。

例如下面的输出原始字节数组:

    byte[] buffer = -127;
    for (byte b : new String(buffer).getBytes())  System.out.print(" " + b); 

要解决您的问题,请将您的数据操作(附加和删除您的数据)作为字节进行,不要与字符串相互转换。

【讨论】:

谢谢!!:) 如果你能解释一下,这将是非常有帮助的。 我找不到简明的解释,但基本上这是因为Java使用了UTF-16,这是一种可变长度编码。也许我的示例中的字节序列不是有效的 UTF-16,因此在从 byte[] 到 String 的转换过程中会修改底层字节。

以上是关于仅发送图像/视频文件时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何检查文件是视频还是图像?

我们可以使用 Opendds 发送图像文件或视频文件吗?

Flutter FFMPEG:设置配置文件基线时出错

如何将视频文件作为 json 数据发送。 (不是文件名或路径,而是内容)到 Android

从照片库中选择视频时,文件大小仅适用于 iOS 13.2 上 Ionic 中的视频

为啥播放视频文件只有声音没有图像