在我的 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 字符,然后再转换回相同的随机字节,是行不通的。
完成这项工作的唯一方法是分阶段读取输入,而不是将其全部读入字符串中。
- 从 InputStream 中读取数据,直到确信已超出 HTTP 边界线。
- 将流的其余部分读入字节数组(您也可以使用 IOUtils 来实现)。
关于java - Java中如何将InputStream转换为字符串到字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737760/