Java - Reader zu InputStream

In diesem kurzen Tutorial werden wir uns die Konvertierung von einem Reader zu einem InputStream ansehen - zuerst mit einfachem Java, dann mit Guava und schließlich mit der Apache Commons IO-Bibliothek.

Dieser Artikel ist Teil der Reihe „Java - Back to Basic“ hier auf Baeldung.

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 Datenblöcke gleichzeitig lesen (und schreiben).

2. Mit Guave

Als nächstes schauen wir uns die viel einfachere Guava-Lösung 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

Schauen wir uns zum Schluss die Commons IO-Lösung 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 den JVM-Standard zu verwenden.

Und da haben Sie es - 3 einfache Möglichkeiten, den Reader in einen InputStream zu verwandeln . Schauen Sie sich das Beispiel auf GitHub an.