Introducción
Hay muchos casos en los que es posible que necesitemos convertir una cadena de texto en una matriz de bytes o una matriz de bytes en una cadena de texto. Esto se puede hacer mediante el uso de conjuntos de caracteres. En este laboratorio, aprenderemos a realizar ambos tipos de conversiones utilizando varios métodos diferentes.
Usando el método getBytes()
El método getBytes() de la clase String proporciona una forma conveniente de obtener una matriz de bytes. La clase String contiene tres versiones sobrecargadas del método getBytes().
String s = "demo!";
byte[] byteArr = s.getBytes();
Usando el método getBytes(String charsetName)
import java.io.UnsupportedEncodingException;
String s = "demo!";
String namedCharset = "UTF-16";
byte[] byteArr = s.getBytes(namedCharset);
Usando el método getBytes(Charset charset)
import java.nio.charset.Charset;
import java.util.Arrays;
String s = "demo!";
Charset charset = Charset.forName("UTF-16");
byte[] byteArr = s.getBytes(charset);
Usando el método Charset.encode()
import java.nio.charset.StandardCharsets;
String s = "demo????????????";
Charset charset = StandardCharsets.ISO_8859_1;
byte[] byteArr = charset.encode(s).array();
Usando CharsetEncoder
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
String s = "demo????????????";
CharsetEncoder charsetEncoder = StandardCharsets.ISO_8859_1.newEncoder();
charsetEncoder.onMalformedInput(CodingErrorAction.IGNORE);
charsetEncoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
.replaceWith(new byte[] {-121});
byte[] byteArr = charsetEncoder.encode(CharBuffer.wrap(s)).array();
Usando el Constructor de String
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, "UTF-16");
Usando una Instancia de Charset
Charset charset = Charset.forName("UTF-16");
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, charset);
Usando el método Charset.decode()
import java.nio.ByteBuffer;
Charset charset = StandardCharsets.UTF_16;
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33, -10};
String stringFromBytes = charset.decode(ByteBuffer.wrap(byteArr)).toString();
Usando CharsetDecoder
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
CharsetDecoder charsetDecoder = StandardCharsets.UTF_16.newDecoder();
charsetDecoder.onUnmappableCharacter(CodingErrorAction.REPLACE)
.onMalformedInput(CodingErrorAction.REPLACE)
.replaceWith("*");
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33, -10};
String stringFromBytes = charsetDecoder.decode(ByteBuffer.wrap(byteArr)).toString();
Ejecutando el código
Copia el código que quieres ejecutar en un archivo como ~/project/Conversion.java y ejecuta el siguiente comando en la terminal:
javac Conversion.java && java Conversion
Resumen
En resumen, hay múltiples maneras de convertir una cadena en un arreglo de bytes o un arreglo de bytes en una cadena. La manera más conveniente es utilizar el método getBytes() de la clase String para generar un arreglo de bytes y luego utilizar el constructor de la clase String para generar una cadena a partir del arreglo de bytes. Alternativamente, podemos utilizar Charsets y CharsetEncoders y CharsetDecoders para realizar las conversiones.



