En Java, tengo una cadena y quiero codificarla como una matriz de bytes (en UTF8, o alguna otra codificación). Alternativamente, tengo una matriz de bytes (en alguna codificación conocida) y quiero convertirla en una cadena de Java. ¿Cómo puedo hacer estas conversiones?
Convertir de String a byte[]:
String s = "some text here";
byte[] b = s.getBytes(StandardCharsets.UTF_8);
Convertir de byte[] a String:
byte[] b = {(byte) 99, (byte)97, (byte)116};
String s = new String(b, StandardCharsets.US_ASCII);
Por supuesto, debe utilizar el nombre de codificación correcto. Mis ejemplos utilizan US-ASCII y UTF-8, las dos codificaciones más comunes.
String original = "hello world";
byte[] utf8Bytes = original.getBytes("UTF-8");
Se puede convertir directamente mediante el constructor String(byte[], String) y el método getBytes(String). Java expone los conjuntos de caracteres disponibles a través de la clase Charset. La documentación del JDK enumera las codificaciones soportadas.
El 90% de las veces, estas conversiones se realizan en flujos, por lo que se utilizan las clases Reader/Writer. No deberías decodificar incrementalmente usando los métodos String en flujos de bytes arbitrarios - te expondrías a errores relacionados con caracteres multibyte.