java - para - sequenceinputstream
Convertir el contenido de un ByteArrayInputStream a cadena (4)
Leí este post pero no estoy siguiendo. He visto this pero no he visto un ejemplo adecuado de conversión de un ByteArrayInputStream
a String
usando un ByteArrayOutputStream
.
Para recuperar el contenido de un ByteArrayInputStream
como una String
, ¿se recomienda utilizar un ByteArrayOutputstream
o hay una forma más preferible?
Estaba considerando este ejemplo y ByteArrayInputStream
y utilizé un Decorator para aumentar la funcionalidad en el tiempo de ejecución. ¿Algún interés en que esta sea una mejor solución para emplear un ByteArrayOutputStream
?
¿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.
Un 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 un ByteArrayInputStream
available()
obtiene 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.
Usar codificación Base64
Suponiendo que tienes tu ByteArrayOutputStream:
ByteArrayOutputStream baos =...
String s = new String(Base64.Encoder.encode(baos.toByteArray()));
Consulte http://docs.oracle.com/javase/8/docs/api/java/util/Base64.Encoder.html
Use el Scanner
y pase a su constructor ByteArrayInputStream
luego lea los datos de su escáner, verifique 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);