Java - Reader voor InputStream

In deze korte tutorial gaan we kijken de conversie van een Lezer aan een InputStream - eerst met gewoon Java, dan met Guava en ten slotte met de Apache Commons IO-bibliotheek.

Dit artikel maakt deel uit van de serie "Java - Back to Basic" hier op Baeldung.

1. Met Java

Laten we beginnen met de Java-oplossing:

@Test openbare leegte gegevenUsingPlainJava_whenConvertingReaderIntoInputStream_thenCorrect () gooit IOException {Reader initialReader = nieuwe StringReader ("Met Java"); char [] charBuffer = nieuw char [8 * 1024]; StringBuilder builder = nieuwe StringBuilder (); int numCharsRead; while ((numCharsRead = initialReader.read (charBuffer, 0, charBuffer.length))! = -1) {builder.append (charBuffer, 0, numCharsRead); } InputStream targetStream = nieuwe ByteArrayInputStream (builder.toString (). GetBytes (StandardCharsets.UTF_8)); initialReader.close (); targetStream.close (); }

Merk op dat we stukjes gegevens tegelijk lezen (en schrijven).

2. Met Guava

Vervolgens - laten we eens kijken naar het veel eenvoudigere Guava-oplossing:

@Test openbare leegte gegevenUsingGuava_whenConvertingReaderIntoInputStream_thenCorrect () gooit IOException {Reader initialReader = nieuwe StringReader ("Met Guava"); InputStream targetStream = nieuwe ByteArrayInputStream (CharStreams.toString (initialReader) .getBytes (Charsets.UTF_8)); initialReader.close (); targetStream.close (); }

Merk op dat we een out-of-the-box invoerstroom gebruiken die de volledige conversie in één voering verandert.

3. Met Commons IO

Eindelijk - laten we eens kijken de Commons IO-oplossing - ook een simpele voering:

@Test openbare leegte gegevenUsingCommonsIO_whenConvertingReaderIntoInputStream () gooit IOException {Reader initialReader = nieuwe StringReader ("With Commons IO"); InputStream targetStream = IOUtils.toInputStream (IOUtils.toString (initialReader), Charsets.UTF_8); initialReader.close (); targetStream.close (); }

Merk op dat we hier te maken hebben met elk type Reader - maar als u specifiek met tekstgegevens werkt, is het altijd een goed idee om de tekenset expliciet te specificeren in plaats van de JVM-standaard te gebruiken.

En daar heb je het - 3 eenvoudige manieren om het Lezer in een InputStream. Zorg ervoor dat je het voorbeeld bekijkt op GitHub.