Java - Læser til InputStream

I denne hurtige vejledning skal vi se på konverteringen fra en Læser til en InputStream - først med almindelig Java, derefter med Guava og endelig med Apache Commons IO-biblioteket.

Denne artikel er en del af "Java - Back to Basic" -serien her på Baeldung.

1. Med Java

Lad os starte med Java-løsningen:

@Test offentlig ugyldighed givenUsingPlainJava_whenConvertingReaderIntoInputStream_thenCorrect () kaster IOException {Reader initialReader = ny StringReader ("Med Java"); char [] charBuffer = ny char [8 * 1024]; StringBuilder builder = ny StringBuilder (); int numCharsRead; while ((numCharsRead = initialReader.read (charBuffer, 0, charBuffer.length))! = -1) {builder.append (charBuffer, 0, numCharsRead); } InputStream targetStream = ny ByteArrayInputStream (builder.toString (). GetBytes (StandardCharsets.UTF_8)); initialReader.close (); targetStream.close (); }

Bemærk, at vi læser (og skriver) klumper af data ad gangen.

2. Med Guava

Næste - lad os se på meget enklere Guava-løsning:

@Test offentlig ugyldighed givenUsingGuava_whenConvertingReaderIntoInputStream_thenCorrect () kaster IOException {Reader initialReader = ny StringReader ("Med Guava"); InputStream targetStream = ny ByteArrayInputStream (CharStreams.toString (initialReader) .getBytes (Charsets.UTF_8)); initialReader.close (); targetStream.close (); }

Bemærk, at vi bruger en out of the box input stream, der forvandler hele konverteringen til en one liner.

3. Med Commons IO

Endelig - lad os se på Commons IO-løsningen - også en simpel liner:

@Test offentlig ugyldighed givenUsingCommonsIO_whenConvertingReaderIntoInputStream () kaster IOException {Reader initialReader = new StringReader ("With Commons IO"); InputStream targetStream = IOUtils.toInputStream (IOUtils.toString (initialReader), Charsets.UTF_8); initialReader.close (); targetStream.close (); }

Bemærk, at vi her har at gøre med enhver form for læser - men hvis du arbejder specifikt med tekstdata, er det altid en god ide at angive tegnsættet eksplicit i stedet for at bruge JVM-standard.

Og der har du det - 3 enkle måder at transformere Læser ind i en InputStream. Sørg for at tjekke prøven på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found