Java - Leitor para matriz de bytes

Java - Leitor para matriz de bytes

Este tutorial rápido mostrará comoconvert a Reader into a byte[] usando Java puro, Guava e a biblioteca Apache Commons IO.

Este artigo faz parte dethe “Java – Back to Basic” series aqui no exemplo.

1. Com Java

Vamos começar com a solução Java simples - passando por uma String intermediária:

@Test
public void givenUsingPlainJava_whenConvertingReaderIntoByteArray_thenCorrect()
  throws IOException {
    Reader initialReader = new StringReader("With Java");

    char[] charArray = new char[8 * 1024];
    StringBuilder builder = new StringBuilder();
    int numCharsRead;
    while ((numCharsRead = initialReader.read(charArray, 0, charArray.length)) != -1) {
        builder.append(charArray, 0, numCharsRead);
    }
    byte[] targetArray = builder.toString().getBytes();

    initialReader.close();
}

Observe que a leitura é feita em blocos, não um caractere de cada vez.

2. Com goiaba

A seguir - vamos dar uma olhada na solução Guava - também usando uma String intermediária:

@Test
public void givenUsingGuava_whenConvertingReaderIntoByteArray_thenCorrect()
  throws IOException {
    Reader initialReader = CharSource.wrap("With Google Guava").openStream();

    byte[] targetArray = CharStreams.toString(initialReader).getBytes();

    initialReader.close();
}

Observe que estamos usando a API do utilitário integrado para não precisar fazer nenhuma conversão de baixo nível do exemplo simples de Java.

3. Com Commons IO

E, finalmente, aqui está uma solução direta que é compatível com o Commons IO:

@Test
public void givenUsingCommonsIO_whenConvertingReaderIntoByteArray_thenCorrect()
  throws IOException {
    StringReader initialReader = new StringReader("With Commons IO");

    byte[] targetArray = IOUtils.toByteArray(initialReader);

    initialReader.close();
}

E aí está - 3 maneiras rápidas de transformar um javaReader em uma matriz de bytes.