Converter o conteúdo de um ByteArrayInputStream em string
-
26-12-2019 - |
Pergunta
Eu leio esta postagem mas não estou acompanhando.Eu tenho visto esse mas não vi um exemplo adequado de conversão de um ByteArrayInputStream
para String
usando um ByteArrayOutputStream
.
Para recuperar o conteúdo de um ByteArrayInputStream
como um String
, está usando um ByteArrayOutputstream
recomendado ou existe uma maneira mais preferível?
eu estava considerando este exemplo e estender ByteArrayInputStream
e utilizar um Decorador para aumentar a funcionalidade em tempo de execução.Qualquer interesse em que esta seja uma solução melhor para empregar um ByteArrayOutputStream
?
Solução
A ByteArrayOutputStream
pode ler de qualquer InputStream
e no final rende um byte[]
.
Porém com um ByteArrayInputStream
é mais simples:
int n = in.available();
byte[] bytes = new byte[n];
in.read(bytes, 0, n);
String s = new String(bytes, StandardCharsets.UTF_8); // Or any encoding.
Para ByteArrayInputStream
available()
produz o número total de bytes.
Resposta ao comentário:usando ByteArrayOutputStream
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buf = new byte[8192];
for (;;) {
int nread = in.read(buf, 0, buf.length);
if (nread <= 0) {
break;
}
baos.write(buf, 0, nread);
}
in.close();
baos.close();
byte[] bytes = baos.toByteArray();
Aqui pode haver qualquer InputStream.
Outras dicas
Por que ninguém mencionou org.apache.commons.io.IOUtils
?
import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;
String result = IOUtils.toString(in, StandardCharsets.UTF_8);
Apenas uma linha de código.
Usar Scanner
e passe para seu construtor o ByteArrayInputStream
em seguida, leia os dados do seu Scanner, verifique este exemplo:
ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(new byte[] { 65, 80 });
Scanner scanner = new Scanner(arrayInputStream);
scanner.useDelimiter("\\Z");//To read all scanner content in one String
String data = "";
if (scanner.hasNext())
data = scanner.next();
System.out.println(data);
Use codificação Base64
Supondo que você tenha seu ByteArrayOutputStream :
ByteArrayOutputStream baos =...
String s = new String(Base64.Encoder.encode(baos.toByteArray()));
Ver http://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html