Перейти к основному содержимому

Java — чтение массива байтов

· 2 мин. чтения

В этом кратком руководстве показано, как преобразовать Reader в byte[] , используя обычную Java, Guava и библиотеку ввода-вывода Apache Commons.

Эта статья является частью серии «Java — Back to Basic» здесь, на ForEach.

1. С Java

Начнем с простого Java-решения — проходим через промежуточную строку:

@Test
public void givenUsingPlainJava_whenConvertingReaderIntoByteArray_thenCorrect()
throws IOException {
Reader initialReader = new StringReader("With Java");

char[] charArray = new char[8 * 1024];
StringBuilder builder = new StringBuilder();
int numCharsRead;
while ((numCharsRead = initialReader.read(charArray, 0, charArray.length)) != -1) {
builder.append(charArray, 0, numCharsRead);
}
byte[] targetArray = builder.toString().getBytes();

initialReader.close();
}

Обратите внимание, что чтение выполняется порциями, а не по одному символу за раз.

2. С гуавой

Далее — давайте взглянем на решение Guava — также с использованием промежуточной строки:

@Test
public void givenUsingGuava_whenConvertingReaderIntoByteArray_thenCorrect()
throws IOException {
Reader initialReader = CharSource.wrap("With Google Guava").openStream();

byte[] targetArray = CharStreams.toString(initialReader).getBytes();

initialReader.close();
}

Обратите внимание, что мы используем встроенный служебный API, чтобы не выполнять низкоуровневое преобразование простого примера Java.

3. С вводом-выводом Commons

И, наконец, вот прямое решение, которое поддерживается из коробки с Commons IO:

@Test
public void givenUsingCommonsIO_whenConvertingReaderIntoByteArray_thenCorrect()
throws IOException {
StringReader initialReader = new StringReader("With Commons IO");

byte[] targetArray = IOUtils.toByteArray(initialReader);

initialReader.close();
}

Вот и все — 3 быстрых способа превратить Java Reader в байтовый массив. Обязательно ознакомьтесь с образцом на GitHub .