Pregunta

Yo leo esta publicación pero no te sigo.He visto este pero no he visto un ejemplo adecuado de cómo convertir un ByteArrayInputStream a String usando un ByteArrayOutputStream.

Para recuperar el contenido de un ByteArrayInputStream como un String, está usando un ByteArrayOutputstream ¿Recomendado o hay una forma más preferible?

Estaba considerando este ejemplo y extender ByteArrayInputStream y utilizar un Decorador para aumentar la funcionalidad en tiempo de ejecución.Cualquier interés en que esta sea una mejor solución para emplear un ByteArrayOutputStream?

¿Fue útil?

Solución

A ByteArrayOutputStream puede leer desde cualquier InputStream y al final produce un byte[].

Sin embargo con un ByteArrayInputStream es más sencillo:

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() produce el número total de bytes.


Respuesta al comentario: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();

Aquí puede haber cualquier InputStream.

Otros consejos

¿Por qué nadie mencionó? org.apache.commons.io.IOUtils?

import java.nio.charset.StandardCharsets;
import org.apache.commons.io.IOUtils;

String result = IOUtils.toString(in, StandardCharsets.UTF_8);

Sólo una línea de código.

Usar Scanner y pasar a su constructor el ByteArrayInputStream luego lea los datos de su escáner, consulte este ejemplo:

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);

Utilice codificación Base64

Suponiendo que tienes tu 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top