logo

Как да конвертирате байтов масив в String в Java

Процесът на преобразуване на байтов масив в низ се нарича декодиране. Този процес изисква Charset. Все пак трябва да използваме набор от знаци за декодиране байтов масив.

Има два начина за преобразуване на байтов масив в String:

  • Като се използва Конструктор на клас низове
  • Като се използва UTF-8 кодиране

Чрез използване на String Class Constructor

Най-простият начин за конвертиране на байтов масив в String, можем да използваме конструктор на клас String с byte[] като аргумент на конструктора.

 String str=new String(bytes); 

Пример

Следващият пример не използва никакво кодиране на знаци.

 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(); } } } 

Изход:

Как да конвертирате байтов масив в String в Java

Чрез използване на UTF-8 кодиране

Запомнете кодирането на символите, докато преобразувате байтовия масив в String. Тъй като байтовете са двоичните данни, докато String са символни данни. Важно е да знаете оригиналното кодиране на текста, от който е създаден масивът от байтове. Когато използваме различно кодиране на знаци, не получаваме обратно оригиналния низ.

Да предположим, че трябва да прочетем байтов масив от файл, който е кодиран в ' ISO_8859_1 '. Нямаме никакво кодиране на знаци, докато преобразуваме масив от байтове в низ. Ние преобразуваме масив от байтове в String с помощта на конструктор на клас String, но той не дава гаранция, че ще получим същия текст обратно. Това е така, защото конструкторът на клас String използва кодирането по подразбиране на платформата.

произволно число в java

Байтовете съдържат 8 бита, които могат да имат до 256 различни стойности. Работи за ASCII символен набор, където се използват само седем бита. Ако наборите от знаци имат повече от 256 стойности, трябва изрично да посочим кодирането, което казва как да кодираме знаци в поредица от байтове.

Съществуват следните набори от знаци, поддържани от платформата Java:

  • Стандартни набори от знаци.ISO_8859_1
  • StandardCharsets.US_ASCII
  • StandardCharsets.UTF_16
  • StandardCharsets.UTF_16BE
  • StandardCharsets.UTF_16LE

Когато не си спомняме точното кодиране, в такива случаи нашата платформа не може да преобразува правилно тези специални знаци. Този проблем се решава чрез предоставяне на ' UTF-8 ' като кодиране на знаци. Java предоставя друг претоварен конструктор в клас String, който приема кодиране на знаци.

 new String(byte[], 'character encoding'); 

Пример

В следващия пример сме използвали StandardCharset.UTF_8 за уточняване на кодирането.

 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(); } } } 

Изход:

Как да конвертирате байтов масив в String в Java

Пример

В следващия пример взехме char, докато създавахме байтовия масив. Работи благодарение на автобокса. Знакът 'T' се преобразува в 84 в байтовия масив и т.н. Ето защо изходът и на двата байтови масива е един и същ.

 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); } } 

Изход:

Как да конвертирате байтов масив в String в Java

Класът String също има конструктор, в който можем да предадем байтов масив и Charset като аргумент. Така че следният оператор може също да се използва за преобразуване на байтов масив в String в Java.

двойно в java
 String str = new String(byteArray, StandardCharsets.UTF_8) 

Класът String също има конструктор за преобразуване на подмножество от байтовия масив в String.

 String(byte[] bytes, int offset, int length, String charsetName) 

Нека видим друг пример, в който се използва различно кодиране.

Пример

 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(); } } } 

Изход:

Как да конвертирате байтов масив в String в Java