Java - Reader zu InputStream

Java - Reader zu InputStream

In diesem kurzen Tutorial werden wir unsthe conversion from a Reader to an InputStream ansehen - zuerst mit einfachem Java, dann mit Guava und schließlich mit der Apache Commons IO-Bibliothek.

Dieser Artikel ist Teil vonthe “Java – Back to Basic” series hier am Beispiel.

1. Mit Java

Beginnen wir mit der Java-Lösung:

@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();
}

Beachten Sie, dass wir jeweils Datenblöcke lesen (und schreiben).

2. Mit Guave

Als nächstes schauen wir uns diemuch simpler Guava solution an:

@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();
}

Beachten Sie, dass wir einen sofort einsatzbereiten Eingabestream verwenden, der die gesamte Konvertierung in einen Einzeiler verwandelt.

3. Mit Commons IO

Zum Schluss - schauen wir unsthe Commons IO solution an - auch einen einfachen Einzeiler:

@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();
}

Beachten Sie, dass es sich hier um jede Art von Reader handelt. Wenn Sie jedoch speziell mit Textdaten arbeiten, ist es immer eine gute Idee, den Zeichensatz explizit anzugeben, anstatt die JVM-Standardeinstellung zu verwenden.

Und da haben Sie es - 3 einfache Möglichkeiten, dieReader inInputStream umzuwandeln.