Existem múltiplas formas de converter uma matriz de bytes para String em Java mas a forma mais simples é utilizar o construtor de String que aceita uma matriz de bytes i.e. uma nova String(byte ) , mas a coisa chave a lembrar é a codificação de caracteres. Uma vez que os bytes são dados binários mas String são dados de caracteres, é muito importante conhecer a codificação original de caracteres do texto a partir do qual a matriz de bytes foi criada. Se utilizar uma codificação de caracteres diferente, não receberá de volta a String original. Por exemplo, se tiver lido essa matriz de bytes de um ficheiro que foi codificado em “ISO-8859-1” e não tiver fornecido qualquer codificação de caracteres enquanto convertia a matriz de bytes em String utilizando um novo construtor String(), então não é garantido que obterá o mesmo texto de volta? Porquê? porque a nova String() por defeito utiliza a codificação por defeito da plataforma (por exemplo, máquina Linux onde a sua JVM está a funcionar), que pode ser diferente de “ISO-8859-1”.
Se for diferente pode ver alguns caracteres de lixo ou mesmo caracteres diferentes alterando completamente o significado do texto e não estou a dizer isto lendo poucos livros, mas enfrentei esta questão num dos meus projectos onde estamos a ler dados da base de dados que contém alguns caracteres franceses.
Na ausência de qualquer codificação especificada, a nossa plataforma não conseguiu converter correctamente todos esses caracteres especiais, não me lembro da codificação exacta. Esse problema foi resolvido fornecendo “UTF-8” como codificação de caracteres enquanto convertia a matriz de bytes em String. Sim, há outro construtor sobrecarregado na classe String que aceita a codificação de caracteres i.e. nova String (byte, “codificação de caracteres”).
BTW, se é novo no mundo da codificação de caracteres e não compreende o que é UTF-8 ou UTF-16, recomendo que leia a diferença do meu artigo entre codificação UTF-8, UTF-16, e UTF-32. Isto não só irá explicar a diferença, mas também dar-lhe uma ideia básica sobre codificação de caracteres.
Outro artigo, recomendo que leia é sobre como Java lida com a codificação de caracteres por defeito. Uma vez que muitas classes que realizam a conversão entre bytes e a codificação de caracteres em cache, é importante aprender como fornecer a codificação adequada ao nível da JVM. Se isto lhe interessa, então aqui está o link para o artigo completo.
Como converter a matriz de bytes para String em Java
Tudo é 0 e 1 no mundo dos computadores, no entanto somos capazes de ver coisas diferentes, por exemplo, texto, imagens, ficheiros de música, etc. A chave para converter a matriz de bytes para String é a codificação de caracteres. Em palavras simples, os valores dos bytes são valores numéricos e a codificação de caracteres é um mapa que fornece um carácter para um byte em particular.
Por exemplo, na maior parte do esquema de codificação de caracteres, por exemplo UTF-8, se o valor do byte é 65, o carácter é A, para 66 é B. Uma vez que o carácter ASCII que inclui, números, alfabetos e alguns caracteres especiais são muito populares, têm o mesmo valor na maior parte do esquema de codificação. Mas isso não é verdade para cada valor de byte, por exemplo -10 pode ser diferente no esquema de codificação UTF-8 e no Windows-1252.
Pode também ler Core Java Volume 1 – Fundamentos ou Core Java for Impatient por Cay S. Horstmann para saber mais sobre a conversão de bytes em caracteres em Java. O segundo livro também cobre Java SE 8, um dos livros mais actualizados no mercado neste momento.
Agora alguém pode questionar que, uma vez que o byte tem 8 bits, só pode representar um máximo de 255 caracteres, o que é bastante menos dado a tantas linguagens no mundo. É por isso que temos esquemas de codificação de caracteres de múltiplos bytes, que podem representar muitos caracteres. Porque precisamos de converter bytes para String? um exemplo do mundo real é exibir dados codificados de base 64 como texto. Para o fazer, é necessário converter a matriz de bytes para String hexadecimal, como mostrado nesse tutorial.
h2>Java Byte Array to String ExampleAgora sabemos o pouco de teoria sobre como converter a matriz de bytes para String, vejamos um exemplo funcional. A fim de tornar o exemplo simples, criei uma matriz de bytes no próprio programa e depois converti essa matriz de bytes em String usando diferentes codificações de caracteres, por exemplo cp1252, que é a codificação de caracteres padrão em Eclipse, windows1252 outra codificação popular em Windows e UTF-8, que é uma codificação de caracteres padrão padrão no mundo. Se executar este programa e olhar para a saída, notará que a maioria dos caracteres são iguais nas três codificações, são na sua maioria caracteres ASCII contendo alfabetos em letras maiúsculas e minúsculas e números, mas os caracteres especiais são renderizados de forma diferente. É aqui que a utilização de codificação incorrecta de caracteres pode criar problemas. O resto do exemplo é bastante directo, pois já temos uma matriz de bytes e estamos apenas a utilizar um construtor de cordas sobrecarregado que também aceita a codificação. Para um exemplo mais complexo, onde lemos o conteúdo de um ficheiro XML, ver este tutorial. Há também caracteres imprimíveis e não imprimíveis em ASCII, que é tratado de forma diferente pela codificação de caracteres diferentes.
importar java.io.UnsupportedEncodingException;public class ByteArrayToStringDemo { public static void main(String args) throws UnsupportedEncodingException { byte random = new byte { 67, 65, 70, 69, 66, 66, 66, 69, -20}; String utf = nova String(random, "UTF-8"); String cp1252 = nova String(random, "Cp1252"); String windows1252 = nova String(random, "Windows-1252"); Sistema.out.println("String created from byte array in UTF-8 encoding : " + utf); System.out.println("byte array to String in Cp1252 encoding : " + cp1252); System.out.println("byte array to String in Windows-1252 encoding : " + windows1252); }}}Output :String created from byte array in UTF-8 encoding : CAFEBABE?matriz de bytes para String em codificação Cp1252 : CAFEBABEìbyte array para String em codificação Windows-1252 : CAFEBABEì
br>É tudo sobre como converter a matriz de bytes para String em Java. Fornecer sempre a codificação de caracteres durante a conversão de bytes para o caracter e essa deve ser a mesma codificação que é utilizada no texto original. Se não souber então UTF-8 é um bom padrão, mas não confie na codificação de caracteres padrão da plataforma porque isso está sujeito a alterações e pode não ser UTF-8. Uma melhor opção é definir a codificação de caracteres para a sua aplicação ao nível da JVM para ter um controlo completo sobre como a matriz de bytes é convertida para String.
Outras Aprendizagem
Estruturas e Algoritmos de Dados: Mergulho Profundo Usando Java
Java Fundamentals: A Linguagem Java
Classe Mestre Completa de Java
0 comentários