java - Java中如何将InputStream转换为字符串到字节数组?

标签 java string arrays inputstream

在我的 java 服务器上,我从 iOS 客户端获取一个 InputStream,如下所示:

--0xKhTmLbOuNdArY
Content-Disposition: form-data; filename="Image001"
Content-Type: image/png

âPNG
IHDR���@���@���™iqfi���gAMA��Ø»7äÈ���tEXtSoftware�Adobe ImageReadyq…e<��IDATx⁄‰;iê]Uôflπ˜Ω◊Ø;ΩB::õY
ê6LÄ“Õ¿
... etc. ...
≠Yy<‘_˜øüYmc˚æØ…ægflóÏK$å±çe0ˆΩleIë¢êH¢Tñê–Üd
≠≤§àä6D¸>˙÷˜˚<øÁ˘˝˜˚º^sÁ=Áû{ÓπÁ‹œπ˜úÄÎ:!44¡@
--0xKhTmLbOuNdArY--

第一行和最后一行是我的 HTTP 边界。第 2 行和第 3 行是有关图像文件的信息。从第 5 行到倒数第二行,有我需要的图像文件作为字节数组。

那么如何从InputStream中获取字符串形式的图像信息和字节数组形式的图像文件? 该解决方案应该快速且高效(文件大小可以是几兆字节/< 10 MB)。

我的方法:

我将 InputStream 转换为字符串,然后将其拆分并将第二个字符串转换为字节数组...

String str = org.apache.commons.io.IOUtils.toString( inputStream );
String[] strArray1 = str.split( "\r\n\r\n", 2 );
byte[] bytes = strArray1[1].getBytes();

这种方式速度很快,但是字节数组似乎被损坏了。我无法从该字节数组创建图像文件...某些字符转换不正确。

也许有人可以帮忙?

最佳答案

代码中断的原因是第一行:

String str = org.apache.commons.io.IOUtils.toString( inputStream );

尝试将随机字节转换为 Unicode 字符,然后再转换回相同的随机字节,是行不通的。

完成这项工作的唯一方法是分阶段读取输入,而不是将其全部读入字符串中。

  1. 从 InputStream 中读取数据,直到确信已超出 HTTP 边界线。
  2. 将流的其余部分读入字节数组(您也可以使用 IOUtils 来实现)。

关于java - Java中如何将InputStream转换为字符串到字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737760/

相关文章:

java - float 数组到 double 数组

java - 是否可以/支持使用 Java 进行 Impala 查询?

java - 在 Mockito 中匹配可变参数以在重载方法中进行单元测试

java - 从上面的包扩展类

javascript - 如何在javascript中将属性与内部对象数组映射

c - 当 p 指向一个数组(int)索引时, '-1[p]' 是什么?

java - 比较 xml 对象 java

string - 如何用 emacs lisp 生成一串双引号?

java - 在 Java 中加密和解密文本

java - 如何在Java中有效地删除XML字符串中的直接标签