Introdução
Existem muitas situações em que podemos precisar converter uma string em um array de bytes ou um array de bytes em uma string. Isso pode ser feito através do uso de conjuntos de caracteres (character sets). Neste laboratório, aprenderemos como fazer ambos os tipos de conversões usando vários métodos diferentes.
Usando o método getBytes()
O método getBytes() da classe String fornece uma maneira conveniente de obter um array de bytes. A classe String contém três versões sobrecarregadas para o método getBytes().
String s = "demo!";
byte[] byteArr = s.getBytes();
Usando o método getBytes(String charsetName)
import java.io.UnsupportedEncodingException;
String s = "demo!";
String namedCharset = "UTF-16";
byte[] byteArr = s.getBytes(namedCharset);
Usando o 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 o 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 o Construtor String
byte[] byteArr = {-2, -1, 0, 100, 0, 101, 0, 109, 0, 111, 0, 33};
String stringFromBytes = new String(byteArr, "UTF-16");
Usando a Instância 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 o 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();
Executando o código
Copie o código que você deseja executar para um arquivo como ~/project/Conversion.java e execute o seguinte comando no terminal:
javac Conversion.java && java Conversion
Resumo
Em conclusão, existem várias maneiras de converter uma string em um array de bytes ou um array de bytes em uma string. A maneira mais conveniente é usar o método getBytes() da classe String para gerar um array de bytes e, em seguida, usar o construtor da classe String para gerar uma string a partir do array de bytes. Alternativamente, podemos usar Charsets e CharsetEncoders e CharsetDecoders para realizar as conversões.



