Java - Lecteur vers InputStream

Dans ce rapide tutoriel, nous allons examiner la conversion d'un Reader en InputStream - d'abord avec Java brut, puis avec Guava et enfin avec la bibliothèque Apache Commons IO.

Cet article fait partie de la série «Java - Back to Basic» ici sur Baeldung.

1. Avec Java

Commençons par la solution 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(); }

Notez que nous lisons (et écrivons) des morceaux de données à la fois.

2. Avec de la goyave

Ensuite, regardons la solution Guava beaucoup plus simple :

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

Notez que nous utilisons un flux d'entrée prêt à l'emploi qui transforme l'ensemble de la conversion en une seule ligne.

3. Avec Commons IO

Enfin, regardons la solution Commons IO - également une simple ligne:

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

Notez que nous traitons ici de tout type de lecteur - mais si vous travaillez spécifiquement avec des données texte, il est toujours judicieux de spécifier le jeu de caractères explicitement plutôt que d'utiliser la valeur par défaut de la JVM.

Et voilà, 3 façons simples de transformer le Reader en InputStream . Assurez-vous de consulter l'exemple sur GitHub.