logo

Kā pārvērst baitu masīvu par virkni Java

Baitu masīva pārveidošanu par virkni sauc par dekodēšanu. Šim procesam ir nepieciešama Charset. Tomēr mums vajadzētu izmantot rakstzīmju kopu dekodēšana baitu masīvs.

Ir divi veidi, kā pārvērst baitu masīvu par virkni:

  • Izmantojot Stīgu klases konstruktors
  • Izmantojot UTF-8 kodējums

Izmantojot virkņu klases konstruktoru

Vienkāršākais veids, kā pārvērst baitu masīvu par virkni, mēs varam izmantot String klases konstruktoru ar baitu [] kā konstruktora argumentu.

 String str=new String(bytes); 

Piemērs

Nākamajā piemērā netiek izmantots rakstzīmju kodējums.

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

Izvade:

Kā pārvērst baitu masīvu par virkni Java

Izmantojot UTF-8 kodējumu

Pārveidojot baitu masīvu par virkni, atcerieties rakstzīmju kodējumu. Tā kā baiti ir binārie dati, savukārt virkne ir rakstzīmju dati. Ir svarīgi zināt tā teksta sākotnējo kodējumu, no kura izveidots baitu masīvs. Ja mēs izmantojam citu rakstzīmju kodējumu, sākotnējā virkne netiek atgriezta.

Pieņemsim, ka mums ir jālasa baitu masīvs no faila, kas ir kodēts ' ISO_8859_1 '. Pārvēršot baitu masīvu par virkni, mums nav rakstzīmju kodējuma. Mēs pārvēršam baitu masīvu par String, izmantojot String klases konstruktoru, taču tas negarantē, ka mēs saņemsim to pašu tekstu. Tas ir tāpēc, ka klases String konstruktors izmanto platformas noklusējuma kodējumu.

Baitos ir 8 biti, kuriem var būt līdz 256 atšķirīgām vērtībām. Tas darbojas ASCII rakstzīmju kopai, kurā tiek izmantoti tikai septiņi biti. Ja rakstzīmju kopām ir vairāk nekā 256 vērtības, mums ir skaidri jānorāda kodējums, kas norāda, kā iekodēt rakstzīmes baitu secībā.

Ir šādas Java platformas atbalstītās rakstzīmju kopas:

  • StandardCharsets.ISO_8859_1
  • StandardCharsets.US_ASCII
  • StandardCharsets.UTF_16
  • StandardCharsets.UTF_16BE
  • StandardCharsets.UTF_16LE

Ja mēs neatceramies precīzu kodējumu, šādos gadījumos mūsu platforma nevar pareizi konvertēt šīs īpašās rakstzīmes. Šī problēma tiek atrisināta, nodrošinot UTF-8 ' kā rakstzīmju kodējumu. Java nodrošina vēl vienu pārslogotu konstruktoru String klasē, kas pieņem rakstzīmju kodējumu.

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

Piemērs

Nākamajā piemērā mēs izmantojām StandardCharset.UTF_8 lai norādītu kodējumu.

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

Izvade:

Kā pārvērst baitu masīvu par virkni Java

Piemērs

Nākamajā piemērā mēs esam izmantojuši char, veidojot baitu masīvu. Tas darbojas autoboksa dēļ. Rakstzīme 'T' tiek pārveidota par 84 baitu masīvā un tā tālāk. Tāpēc abu baitu masīvu izvade ir vienāda.

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

Izvade:

Kā pārvērst baitu masīvu par virkni Java

String klasei ir arī konstruktors, kurā kā argumentu varam nodot baitu masīvu un rakstzīmju kopu. Tātad šo paziņojumu var izmantot arī, lai Java pārveidotu baitu masīvu par virkni.

 String str = new String(byteArray, StandardCharsets.UTF_8) 

String klasei ir arī konstruktors, lai pārveidotu baitu masīva apakškopu par virkni.

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

Apskatīsim citu piemēru, kurā tiek izmantots atšķirīgs kodējums.

Piemērs

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

Izvade:

Kā pārvērst baitu masīvu par virkni Java