Java - Reader para InputStream
Neste tutorial rápido, vamos dar uma olhada emthe conversion from a Reader to an InputStream - primeiro com Java puro, depois com Guava e finalmente com a biblioteca IO do Apache Commons.
Este artigo faz parte dethe “Java – Back to Basic” series aqui no exemplo.
1. Com Java
Vamos começar com a solução 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();
}
Observe que estamos lendo (e gravando) blocos de dados por vez.
2. Com goiaba
A seguir - vamos dar uma olhada emmuch 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();
}
Observe que estamos usando um fluxo de entrada pronto para uso que transforma toda a conversão em um único revestimento.
3. Com Commons IO
Finalmente - vamos olhar parathe Commons IO solution - também um liner simples:
@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();
}
Observe que estamos lidando com qualquer tipo de leitor - mas se você estiver trabalhando especificamente com dados de texto, é sempre uma boa ideia especificar o conjunto de caracteres explicitamente em vez de usar o padrão JVM.
E aí está - 3 maneiras simples de transformarReader emInputStream.