问题
如何将整个InputStream
读入字节数组?
#1 热门回答(919 赞)
你可以使用ApacheCommons IO来处理此类和类似的任务。
IOUtils
类型有一个静态方法来读取InputStream
并返回byte []
。
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);
在内部,它创建一个ByteArrayOutputStream
并将字节复制到输出,然后调用toByteArray()
。它通过复制4KiB块中的字节来处理大文件。
#2 热门回答(390 赞)
你需要从InputStream
中读取每个字节并将其写入ByteArrayOutputStream
。然后,你可以通过调用toByteArray()
来检索基础字节数组;例如
InputStream is = ...
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[16384];
while ((nRead = is.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
return buffer.toByteArray();
#3 热门回答(170 赞)
最后,二十年后,有一个简单的解决方案,无需第三方库,多亏了Java 9:
InputStream is;
…
byte[] array = is.readAllBytes();
还要注意方便的方法readNBytes(byte [] b,int off,int len)
和transferTo(OutputStream)
解决重复需求。