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.