用Java将InputStream转换为字节数组

如何将整个InputStream读入字节数组?


你可以使用Apache Commons IO来处理这个和类似的任务。

IOUtils类型有一个静态方法来读取一个InputStream并返回一个byte[]

InputStream is;
byte[] bytes = IOUtils.toByteArray(is);

在内部,这将创建一个ByteArrayOutputStream并将这些字节复制到输出,然后调用到ByteArrayOutputStream toByteArray() 。 它通过复制4KiB块中的字节来处理大文件。


您需要从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();

最后,二十年后,有了一个简单的解决方案,无需第三方库,这要感谢Java 9:

InputStream is;
…
byte[] array = is.readAllBytes();

还要注意便捷方法readNBytes(byte[] b, int off, int len)transferTo(OutputStream)寻址重复需要。

链接地址: http://www.djcxy.com/p/34887.html

上一篇: Convert InputStream to byte array in Java

下一篇: Creating a byte array from a stream