java - 通过套接字发送图像流问题 - Android

标签 java android image sockets stream

我已经实现了一个使用 SP 相机拍照并通过套接字将其发送到服务器的应用程序。

我正在使用以下代码读取本地存储的图像文件并通过套接字以连续的 block 形式发送它:

FileInputStream fileInputStream = new FileInputStream( "my_image_file_path" );
ByteArrayOutputStream buffer = new ByteArrayOutputStream();

int nRead;
byte[] data = new byte[16384];

try {
    while( (nRead = fileInputStream.read(data, 0, data.length)) != -1 ){
        buffer.write(data, 0, nRead);
        networkOutputStream.write( buffer.toByteArray() );
        buffer.flush();
    }
} catch( IOException e ){
    e.printStackTrace();
}

我面临的问题是,更改字节数组的大小 data[] 会影响实际发送到服务器的图像量

下面张贴的图片应该可以帮助您理解:

  • byte[] data = new byte[16384];

enter image description here

  • byte[] data = new byte[32768];

enter image description here

  • byte[] data = new byte[65536];

enter image description here

等等。

如您所想,我可以找到一个允许我发送完整图像的尺寸,但这种临时解决方案是 Not Acceptable ,因为可能需要发送任何尺寸的图像。

我认为我以缓冲方式读取图像文件的方式似乎有问题,你能帮我吗?

提前致谢!

最佳答案

ByteArrayOutputStream 的使用是多余的,每次它增长时您都在发送它的全部内容。按如下方式更改循环:

FileInputStream fileInputStream = new FileInputStream( "my_image_file_path" );

int nRead;
byte[] data = new byte[16384];

try {
    while( (nRead = fileInputStream.read(data)) != -1 ){
        networkOutputStream.write( data, 0, nRead );
    }

} catch( IOException e ){
    e.printStackTrace();
}
fileInputStream.close();

关于java - 通过套接字发送图像流问题 - Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12058453/

相关文章:

java - 带有 API 21 的 Snackbar

java - fragment 错误

android - 查询联系人数据库中的电子邮件时出现语法错误

image - 主动外观模型 (AAM) 与主动形状模型 (ASM)

ios - 在 objective-C 中比较 ios 中的多个图像

java - Ivy 似乎只获取 javadoc jar

java - 如何使用 Struts2 中 Action 类的数组填充 SelectBox?

java - Java中是否允许空字符串作为枚举成员

algorithm - ansi-c。 .pgm 图片的 High-Pass3 过滤器

java - 无法调用类中的方法