Java - Lecteur à InputStream

Java - Lecteur à InputStream

Dans ce rapide didacticiel, nous allons examinerthe conversion from a Reader to an InputStream - d'abord avec Java, puis avec Guava et enfin avec la bibliothèque Apache Commons IO.

Cet article fait partie dethe “Java – Back to Basic” series ici par exemple.

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 blocs de données à la fois.

2. Avec goyave

Ensuite, regardons lesmuch simpler Guava solution:

@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 - regardonsthe Commons IO solution - é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 explicitement le jeu de caractères plutôt que d'utiliser la valeur par défaut de la JVM.

Et là vous l'avez - 3 façons simples de transformer lesReader enInputStream.