logo

Sådan konverteres byte array til String i Java

Processen med at konvertere en byte-array til en streng kaldes afkodning. Denne proces kræver et tegnsæt. Vi skal dog bruge tegnsæt til afkodning et byte-array.

Der er to måder at konvertere byte array til String:

hvordan man tjekker blokerede numre på Android
  • Ved hjælp af String klasse konstruktør
  • Ved hjælp af UTF-8-kodning

Ved at bruge String Class Constructor

Den enkleste måde at konvertere et byte-array til String, vi kan bruge String-klassekonstruktør med byte[] som konstruktørargument.

 String str=new String(bytes); 

Eksempel

Det følgende eksempel bruger ingen tegnkodning.

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

Produktion:

Sådan konverteres byte array til String i Java

Ved at bruge UTF-8-kodning

Husk tegnkodningen, mens du konverterer byte-arrayet til String. Da bytes er de binære data, mens String er tegndata. Det er vigtigt at kende den originale kodning af teksten, som byte-arrayet har oprettet. Når vi bruger en anden tegnkodning, får vi ikke den oprindelige streng tilbage.

Antag, at vi skal læse byte-array fra en fil, der er kodet i ' ISO_8859_1 '. Vi har ingen tegnkodning, mens vi konverterer byte-array til streng. Vi konverterer byte array til String ved at bruge String klasse constructor, men det giver ikke en garanti for, at vi får den samme tekst tilbage. Det er fordi konstruktøren af ​​String-klassen bruger platformens standardkodning.

Bytes rummer 8 bit, som kan have op til 256 forskellige værdier. Det virker til ASCII-tegnsæt, hvor der kun bruges syv bit. Hvis tegnsættene har mere end 256 værdier, bør vi eksplicit specificere kodningen, som fortæller, hvordan man koder tegn til en sekvens af bytes.

Der er følgende tegnsæt, der understøttes af Java-platformen:

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

Når vi ikke husker den nøjagtige kodning, er vores platform i sådanne tilfælde ikke i stand til at konvertere disse specialtegn korrekt. Dette problem løses ved at give ' UTF-8 ' som en tegnkodning. Java giver en anden overbelastet konstruktør i String-klassen, som accepterer tegnkodning.

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

Eksempel

I det følgende eksempel har vi brugt StandardCharset.UTF_8 for at angive kodningen.

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

Produktion:

Sådan konverteres byte array til String i Java

Eksempel

I det følgende eksempel har vi taget char, mens vi oprettede byte-arrayet. Det virker på grund af autoboxing. Tegnet 'T' bliver konverteret til 84 i byte-arrayet og så videre. Det er derfor, outputtet af begge byte-arrays er det samme.

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

Produktion:

Sådan konverteres byte array til String i Java

String-klassen har også en konstruktør, hvori vi kan sende byte-array og Charset som et argument. Så følgende sætning kan også bruges til at konvertere byte-array til String i Java.

ulv mod ræv
 String str = new String(byteArray, StandardCharsets.UTF_8) 

String-klassen har også en konstruktør til at konvertere en delmængde af byte-arrayet til String.

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

Lad os se et andet eksempel, hvor forskellig kodning bruges.

Eksempel

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

Produktion:

Sådan konverteres byte array til String i Java