¿Cómo convertir Java String en byte[]?

¿Hay alguna manera de convertir Java String en un byte[] (no el Byte[] en caja)?

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 recibiendo salidas separadas. No se puede mostrar la primera salida, ya que es una cadena gzip.

<A Gzip String>
******
[B@38ee9f13

La segunda es una dirección. ¿Hay algo que esté haciendo mal? Necesito el resultado en un byte[] para alimentar 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());
}
Solución

El objeto que necesita su método decompressGZIP() es un byte[].

Así que la respuesta básica y técnica a la pregunta que has hecho es:

byte[] b = string.getBytes();
byte[] b = string.getBytes(Charset.forName("UTF-8"));
byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only

Sin embargo, el problema con el que parece estar luchando es que esto no se muestra muy bien. Llamar a toString() sólo te dará el valor por defecto Object.toString() que es el nombre de la clase + la dirección de memoria. En tu resultado [B@38ee9f13, la [B significa byte[] y 38ee9f13 es la dirección de memoria, separada por una @.

Para mostrarlo puedes utilizar:

Arrays.toString(bytes);

Pero esto sólo se mostrará como una secuencia de enteros separados por comas, que puede o no ser lo que usted quiere.

Para obtener una Cadena legible a partir de un byte[], utilice:

String string = new String(byte[] bytes, Charset charset);

La razón por la que se favorece la versión Charset es que todos los objetos String en Java se almacenan internamente como UTF-16. Al convertir a un byte[] obtendrá un desglose diferente de bytes para los glifos dados de ese String, dependiendo del conjunto de caracteres elegido.

Comentarios (9)
  String example = "Convert Java String";
  byte[] bytes = example.getBytes();
Comentarios (1)

Puedes utilizar String.getBytes() que devuelve la matriz byte[].

Comentarios (0)