logo

Hvordan konvertere byte array til String i Java

Prosessen med å konvertere en byte-array til en streng kalles dekoding. Denne prosessen krever et tegnsett. Vi bør imidlertid bruke tegnsett for dekoding en byte-array.

Det er to måter å konvertere byte array til String:

hvordan sjekke blokkerte numre på Android
  • Ved bruk av String klasse konstruktør
  • Ved bruk av UTF-8-koding

Ved å bruke String Class Constructor

Den enkleste måten å konvertere en byte-array til String, vi kan bruke String-klassekonstruktør med byte[] som konstruktørargument.

 String str=new String(bytes); 

Eksempel

Følgende eksempel bruker ingen tegnkoding.

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

Produksjon:

Hvordan konvertere byte array til String i Java

Ved å bruke UTF-8-koding

Husk tegnkodingen mens du konverterer byte-arrayen til String. Siden bytes er de binære dataene mens String er tegndata. Det er viktig å kjenne den opprinnelige kodingen til teksten som byte-matrisen har opprettet fra. Når vi bruker en annen tegnkoding, får vi ikke tilbake den opprinnelige strengen.

Anta at vi må lese byte-array fra en fil som er kodet i ' ISO_8859_1 '. Vi har ingen tegnkoding når vi konverterer byte-array til streng. Vi konverterer byte array til String ved å bruke String class constructor, men det gir ingen garanti for at vi får den samme teksten tilbake. Det er fordi konstruktøren av String-klassen bruker plattformens standardkoding.

Bytes har 8 biter som kan ha opptil 256 distinkte verdier. Det fungerer for ASCII-tegnsett, der bare syv biter brukes. Hvis tegnsettene har mer enn 256 verdier, bør vi eksplisitt spesifisere kodingen som forteller hvordan tegn skal kodes inn i en sekvens av byte.

Det er følgende tegnsett som støttes av Java-plattformen:

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

Når vi ikke husker nøyaktig koding, er i slike tilfeller ikke vår plattform i stand til å konvertere disse spesialtegnene riktig. Dette problemet løses ved å gi ' UTF-8 ' som en tegnkoding. Java gir en annen overbelastet konstruktør i String-klassen som aksepterer tegnkoding.

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

Eksempel

I følgende eksempel har vi brukt StandardCharset.UTF_8 for å spesifisere kodingen.

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

Produksjon:

Hvordan konvertere byte array til String i Java

Eksempel

I det følgende eksempelet har vi tatt char mens vi opprettet byte-arrayen. Det fungerer på grunn av autoboksing. Tegnet 'T' blir konvertert til 84 i byte-arrayet og så videre. Det er derfor utgangen til begge byte-arrayene er den 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); } } 

Produksjon:

Hvordan konvertere byte array til String i Java

String-klassen har også en konstruktør der vi kan sende byte array og Charset som et argument. Så følgende setning kan også brukes til å konvertere byte array til String i Java.

partielt derivat av lateks
 String str = new String(byteArray, StandardCharsets.UTF_8) 

String-klassen har også en konstruktør for å konvertere et delsett av byte-matrisen til String.

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

La oss se et annet eksempel der forskjellig koding brukes.

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

Produksjon:

Hvordan konvertere byte array til String i Java