您可以使用 Apache Commons IO来处理此类和类似的任务。
IOUtils类型有一个静态方法来读取InputStream并返回byte[] 。
InputStream is;
byte[] bytes = IOUtils.toByteArray(is);在内部,它创建一个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);
}
return buffer.toByteArray();
最后,二十年后,有了一个简单的解决方案,而不需要第三方库,这要归功于Java 9 :
InputStream is;
…
byte[] array = is.readAllBytes();还要注意readNBytes(byte[] b, int off, int len)和transferTo(OutputStream)解决重复需求的便捷方法。