Автор оригинала: Eugen Paraschiv.
В этом кратком руководстве мы рассмотрим преобразование из Reader в InputStream – сначала с помощью простой Java, затем с помощью Guava и, наконец, с помощью библиотеки ввода-вывода Apache Commons.
Эта статья является частью серии “Java – Back to Basic” здесь, на Baeldung.
1. С Java
Давайте начнем с решения Java:
@Test public void givenUsingPlainJava_whenConvertingReaderIntoInputStream_thenCorrect() throws IOException { Reader initialReader = new StringReader("With Java"); char[] charBuffer = new char[8 * 1024]; StringBuilder builder = new StringBuilder(); int numCharsRead; while ((numCharsRead = initialReader.read(charBuffer, 0, charBuffer.length)) != -1) { builder.append(charBuffer, 0, numCharsRead); } InputStream targetStream = new ByteArrayInputStream( builder.toString().getBytes(StandardCharsets.UTF_8)); initialReader.close(); targetStream.close(); }
Обратите внимание, что мы одновременно читаем (и записываем) куски данных.
2. С гуавой
Далее – давайте рассмотрим гораздо более простое решение гуавы :
@Test public void givenUsingGuava_whenConvertingReaderIntoInputStream_thenCorrect() throws IOException { Reader initialReader = new StringReader("With Guava"); InputStream targetStream = new ByteArrayInputStream(CharStreams.toString(initialReader) .getBytes(Charsets.UTF_8)); initialReader.close(); targetStream.close(); }
Обратите внимание, что мы используем поток ввода “из коробки”, который превращает все преобразование в один лайнер.
3. С помощью Commons IO
Наконец – давайте посмотрим на решение Commons IO – тоже простое.:
@Test public void givenUsingCommonsIO_whenConvertingReaderIntoInputStream() throws IOException { Reader initialReader = new StringReader("With Commons IO"); InputStream targetStream = IOUtils.toInputStream(IOUtils.toString(initialReader), Charsets.UTF_8); initialReader.close(); targetStream.close(); }
Обратите внимание, что мы здесь имеем дело с любым типом читателя, но если вы работаете специально с текстовыми данными, всегда полезно явно указать кодировку, а не использовать JVM по умолчанию.
И вот вам он – 3 простых способа преобразования Reader в InputStream . Обязательно ознакомьтесь с образцом на GitHub .