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:
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:
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:
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: