Вопрос-ответ

Convert InputStream to byte array in Java

Преобразовать InputStream в массив байтов в Java

Как мне прочитать целое значение InputStream в массив байтов?

Переведено автоматически
Ответ 1

Вы можете использовать Apache Commons IO для решения этой и подобных задач.

У IOUtils типа есть статический метод для чтения InputStream и возврата byte[].

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

Внутренне это создает ByteArrayOutputStream и копирует байты в выходные данные, затем вызывает toByteArray(). Он обрабатывает большие файлы, копируя байты блоками по 4 КБ.

Ответ 2

Вам нужно прочитать каждый байт из вашего 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();
Ответ 3

Наконец, спустя двадцать лет, появилось простое решение без необходимости в сторонней библиотеке, благодаря Java 9:

InputStream is;

byte[] array = is.readAllBytes();

Обратите также внимание на удобные методы readNBytes(byte[] b, int off, int len) и transferTo(OutputStream) решение повторяющихся задач.

Ответ 4

Используйте ванильную Java DataInputStream и ее readFully метод (существует как минимум с Java 1.4):

...
byte[] bytes = new byte[(int) file.length()];
DataInputStream dis = new DataInputStream(new FileInputStream(file));
dis.readFully(bytes);
...

Есть несколько других разновидностей этого метода, но я использую его постоянно для данного варианта использования.

java arrays