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.