Procesul de conversie a unui tablou de octeți într-un șir se numește decodare. Acest proces necesită un set de caractere. Cu toate acestea, ar trebui să folosim set de caractere pentru decodare o matrice de octeți.
Există două moduri de a converti matricea de octeți în șir:
- Prin utilizarea Constructor de clasă șiruri
- Prin utilizarea Codificare UTF-8
Prin utilizarea String Class Constructor
Cel mai simplu mod de a converti o matrice de octeți în String, putem folosi constructorul clasei String cu byte[] ca argument constructor.
String str=new String(bytes);
Exemplu
Următorul exemplu nu utilizează nicio codificare de caractere.
public class ByteArraytoStringExample { public static void main(String args[]) { try { byte[] bytes = 'hello world'.getBytes(); //creates a string from the byte array without specifying character encoding String s = new String(bytes); System.out.println(s); } catch(Exception e) { e.printStackTrace(); } } }
Ieșire:
Prin utilizarea codării UTF-8
Amintiți-vă de codificarea caracterelor în timp ce convertiți matricea de octeți în șir. Deoarece octeții sunt datele binare în timp ce String sunt date de caractere. Este important să cunoașteți codificarea originală a textului din care a creat matricea de octeți. Când folosim o codificare diferită a caracterelor, nu primim șirul original înapoi.
Să presupunem că trebuie să citim o matrice de octeți dintr-un fișier care este codificat în ' ISO_8859_1 '. Nu avem nicio codificare de caractere în timp ce convertim matricea de octeți în șir. Convertim matricea de octeți în String folosind constructorul clasei String, dar nu oferă o garanție că vom primi același text înapoi. Se datorează faptului că constructorul clasei String utilizează codificarea implicită a platformei.
Bytes conține 8 biți care pot avea până la 256 de valori distincte. Funcționează pentru setul de caractere ASCII, unde sunt utilizați doar șapte biți. Dacă seturile de caractere au mai mult de 256 de valori, ar trebui să specificăm în mod explicit codificarea care spune cum să codificăm caracterele într-o secvență de octeți.
Există următoarele seturi de caractere acceptate de platforma Java sunt:
- StandardCharsets.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
Când nu ne amintim codificarea exactă, în astfel de cazuri platforma noastră nu este capabilă să convertească acele caractere speciale în mod corespunzător. Această problemă este rezolvată prin furnizarea „ UTF-8 ' ca codificare de caractere. Java oferă un alt constructor supraîncărcat în clasa String care acceptă codificarea caracterelor.
new String(byte[], 'character encoding');
Exemplu
În exemplul următor, am folosit StandardCharset.UTF_8 pentru a specifica codificarea.
import java.io.IOException; import java.nio.charset.StandardCharsets; public class ByteArraytoStringExample1 { public static void main(String[] args) { try { byte[] b = 'Morning'.getBytes(StandardCharsets.UTF_8); //byte array String string = new String(b, StandardCharsets.UTF_8); //string with 'UTF-8' encoding System.out.println(string); } catch(Exception e) { e.printStackTrace(); } } }
Ieșire:
Exemplu
În exemplul următor, am luat char la crearea matricei de octeți. Funcționează din cauza autoboxing-ului. Caracterul „T” este convertit la 84 în matricea de octeți și așa mai departe. De aceea, ieșirea ambelor matrice de octeți este aceeași.
public class ByteArraytoStringExample2 { public static void main(String[] args) { byte[] byteArray = { 'T', 'E', 'C', 'H', 'N', 'O','L','O','G','Y'}; //byte array of characters byte[] byteArray1 = { 84, 69, 67, 72, 78, 79, 76, 79, 71, 89}; //array of ASCII values String s = new String(byteArray); //converts byteArray to String String str = new String(byteArray1); System.out.println(s); System.out.println(str); } }
Ieșire:
Clasa String are, de asemenea, un constructor în care putem trece matrice de octeți și Charset ca argument. Deci următoarea declarație poate fi folosită și pentru a converti matricea de octeți în șir în Java.
Secvența Fibonacci java
String str = new String(byteArray, StandardCharsets.UTF_8)
Clasa String are, de asemenea, un constructor pentru a converti un subset al matricei de octeți în String.
String(byte[] bytes, int offset, int length, String charsetName)
Să vedem un alt exemplu în care este folosită codificare diferită.
Exemplu
import java.io.UnsupportedEncodingException; public class ByteArraytoStringExample3 { public static void main(String args[]) { try { byte[] bytes = new byte[] { 75, 69, 82, 115, 121, 90, 43, 98, -30}; //bytes in ASCII code String utf = new String(bytes, 'UTF-8'); //converts into UTF-8 encoding String cp1252 = new String(bytes, 'Cp1252'); //conversts into Cp1252 endcoding //converts into windows-1252 encoding String windows1252 = new String(bytes, 'Windows-1252'); System.out.println('String in UTF-8 encoding : ' + utf); System.out.println('String in Cp1252 encoding : ' + cp1252); System.out.println('string Windows-1252 encoding : ' + windows1252); } catch(Exception e) { e.printStackTrace(); } } }
Ieșire: