¿Hay alguna forma de convertir Java String
a a byte[]
( no en caja Byte[]
)?
Al intentar esto:
System.out.println(response.split("\r\n\r\n")[1]);
System.out.println("******");
System.out.println(response.split("\r\n\r\n")[1].getBytes().toString());
y estoy obteniendo salidas separadas. No se puede mostrar la primera salida, ya que es una cadena gzip.
<A Gzip String>
******
[B@38ee9f13
El segundo es una dirección. ¿Hay algo que esté haciendo mal? Necesito el resultado en a byte[]
para alimentarlo al descompresor gzip, que es el siguiente.
String decompressGZIP(byte[] gzip) throws IOException {
java.util.zip.Inflater inf = new java.util.zip.Inflater();
java.io.ByteArrayInputStream bytein = new java.io.ByteArrayInputStream(gzip);
java.util.zip.GZIPInputStream gzin = new java.util.zip.GZIPInputStream(bytein);
java.io.ByteArrayOutputStream byteout = new java.io.ByteArrayOutputStream();
int res = 0;
byte buf[] = new byte[1024];
while (res >= 0) {
res = gzin.read(buf, 0, buf.length);
if (res > 0) {
byteout.write(buf, 0, res);
}
}
byte uncompressed[] = byteout.toByteArray();
return (uncompressed.toString());
}
String.getBytes()
hecho devuelve una matriz de bytes, pero su creencia de que latoString()
de una matriz de bytes devolverá un resultado útil es incorrecta.Respuestas:
El objeto que
decompressGZIP()
necesita su método es abyte[]
.Entonces, la respuesta técnica básica a la pregunta que ha formulado es:
Sin embargo, el problema con el que parece estar luchando es que esto no se ve muy bien. Llamar
toString()
solo le dará el valor predeterminado,Object.toString()
que es el nombre de la clase + la dirección de memoria. En su resultado[B@38ee9f13
, el[B
mediobyte[]
y38ee9f13
es la dirección de memoria, separados por un@
.Para fines de visualización, puede usar:
Pero esto solo se mostrará como una secuencia de enteros separados por comas, que pueden o no ser lo que desea.
Para obtener una
String
respuesta legible de abyte[]
, use:La razón por la que
Charset
se prefiere la versión es que todos losString
objetos en Java se almacenan internamente como UTF-16. Al convertir a unbyte[]
, obtendrá un desglose diferente de bytes para los glifos dadosString
, dependiendo del conjunto de caracteres elegido.fuente
string.getBytes(StandardCharsets.UTF_8)
también se puede usar, y es lo mismo questring.getBytes(Charset.forName("UTF-8"))
StandardCharsets
es nuevo con Java 7Charset.forName("UTF-8")
hace o por qué es importante.fuente
Intenta usar String.getBytes (). Devuelve un byte [] que representa datos de cadena. Ejemplo:
fuente
Simplemente:
fuente
abc
contiene caracteres no estadounidenses ASCII, como"greater than 2³² − 1"
o solo datos binarios (como " A b2")?�
esta cadena tiene solo 5 caracteres. Sin embargo, cuando lo usogetBytes()
tengo 7 caracteres.Puede usar
String.getBytes()
cual devuelve labyte[]
matriz.fuente
Quizás quieras probar
return new String(byteout.toByteArray(Charset.forName("UTF-8")))
fuente
No es necesario cambiar java como un parámetro de cadena. Debe cambiar el código c para recibir una cadena sin puntero y en su código:
fuente
Sé que llego un poco tarde a la fiesta, pero esto funciona bastante bien (nuestro profesor nos lo dio)
fuente