Java - считыватель в байтовый массив
Это краткое руководство покажет, какconvert a Reader into a byte[] использовать простую Java, Guava и библиотеку ввода-вывода Apache Commons.
Эта статья является частьюthe “Java – Back to Basic” series здесь для примера.
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 IO
И, наконец, вот прямое решение, которое уже из коробки поддерживается 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 быстрых способа преобразовать javaReader в байтовый массив.