Автор оригинала: Eugen Paraschiv.
Этот краткий учебник покажет, как преобразовать считыватель в байт[] с помощью простой Java, Guava и библиотеки Apache Commons IO.
Эта статья является частью серии “Java – Back to Basic” здесь, на Baeldung.
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 быстрых способа преобразовать java Reader в байтовый массив. Обязательно проверьте образец на GitHub .