如何在Java中将InputStream转换为字符串到字节数组?
在我的java服务器上,我从iOS客户端获得一个InputStream,如下所示:如何在Java中将InputStream转换为字符串到字节数组?,java,string,bytearray,inputstream,Java,String,Bytearray,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Ä“Õ¿
--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--
这种方式非常快,但字节数组似乎已损坏。我无法从该字节数组创建图像文件。。。某些字符转换错误
也许有人可以帮忙?代码中断的原因是第一行:
String str = org.apache.commons.io.IOUtils.toString( inputStream );
尝试将随机字节转换为Unicode字符,然后再转换回相同的随机字节是行不通的
实现这一点的唯一方法是分阶段读取输入,而不是将其全部读入字符串
IOUtils
)您可能不想将
字节
转换为字符
,这样会破坏您的字节,因为字节流与任何编码都不对应
我将使用IOUtils.toByteArray
以byte[]
的形式读取整个内容,然后在该数组中查找字节序列“\r\n\r\n”.getBytes()
请注意,IOUtils.toByteArray
在流结束之前不会停止。这对于HTTP 1.0来说应该没问题,但对于HTTP 1.1来说则会中断,因为HTTP 1.1可以在同一个流上发送多个请求。在这种情况下,您必须增量读取以查找内容长度
字段,这样您就知道要读取多少输入流
String str = org.apache.commons.io.IOUtils.toString( inputStream );