Рубрики
Без рубрики

Java – Reader для ввода потока

Как преобразовать считыватель в поток ввода с помощью Java, Guava и библиотеки ввода-вывода Apache Commons.

Автор оригинала: 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 .