Java - Reader per InputStream

In questo breve tutorial esamineremo la conversione da Reader a InputStream , prima con Java semplice, poi con Guava e infine con la libreria Apache Commons IO.

Questo articolo fa parte della serie "Java - Back to Basic" qui su Baeldung.

1. Con Java

Cominciamo con la soluzione Java:

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

Si noti che stiamo leggendo (e scrivendo) blocchi di dati alla volta.

2. Con Guava

Avanti - diamo un'occhiata alla soluzione Guava molto più semplice :

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

Si noti che stiamo usando un flusso di input fuori dagli schemi che trasforma l'intera conversione in una riga.

3. Con Commons IO

Infine, diamo un'occhiata alla soluzione Commons IO, anch'essa semplice:

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

Nota che qui abbiamo a che fare con qualsiasi tipo di Reader, ma se stai lavorando in modo specifico con dati di testo, è sempre una buona idea specificare esplicitamente il set di caratteri piuttosto che utilizzare l'impostazione predefinita JVM.

Ed ecco fatto: 3 semplici modi per trasformare il Reader in un InputStream . Assicurati di controllare l'esempio su GitHub.