logo

Kako pretvoriti niz bajtov v niz v Javi

Postopek pretvorbe niza bajtov v niz se imenuje dekodiranje. Ta postopek zahteva Charset. Vendar bi morali uporabiti nabor znakov za dekodiranje niz bajtov.

Obstajata dva načina za pretvorbo niza bajtov v niz:

  • Z uporabo Konstruktor razreda nizov
  • Z uporabo UTF-8 kodiranje

Z uporabo konstruktorja razreda nizov

Najenostavnejši način za pretvorbo niza bajtov v niz, lahko uporabimo konstruktor razreda niza z bajtom [] kot argumentom konstruktorja.

 String str=new String(bytes); 

Primer

Naslednji primer ne uporablja nobenega kodiranja znakov.

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

Izhod:

Kako pretvoriti niz bajtov v niz v Javi

Z uporabo kodiranja UTF-8

Med pretvarjanjem niza bajtov v niz ne pozabite na kodiranje znakov. Ker so bajti binarni podatki, medtem ko je niz znakovni podatek. Pomembno je poznati izvirno kodiranje besedila, iz katerega je bilo ustvarjeno niz bajtov. Ko uporabimo drugačno kodiranje znakov, ne dobimo nazaj izvirnega niza.

Recimo, da moramo prebrati niz bajtov iz datoteke, ki je kodirana v ' ISO_8859_1 '. Med pretvorbo niza bajtov v niz nimamo nobenega kodiranja znakov. Niz bajtov pretvorimo v String z uporabo konstruktorja razreda String, vendar ne nudi jamstva, da bomo isto besedilo dobili nazaj. To je zato, ker konstruktor razreda String uporablja privzeto kodiranje platforme.

Bajti vsebujejo 8 bitov, ki imajo lahko do 256 različnih vrednosti. Deluje za nabor znakov ASCII, kjer se uporablja samo sedem bitov. Če imajo nabori znakov več kot 256 vrednosti, moramo izrecno določiti kodiranje, ki pove, kako kodirati znake v zaporedje bajtov.

Obstajajo naslednji nabori znakov, ki jih podpira platforma Java:

  • Standardni nabori znakov.ISO_8859_1
  • StandardCharsets.US_ASCII
  • StandardCharsets.UTF_16
  • StandardCharsets.UTF_16BE
  • StandardCharsets.UTF_16LE

Če se ne spomnimo natančnega kodiranja, v takih primerih naša platforma ne more pravilno pretvoriti teh posebnih znakov. Ta problem je rešen z zagotavljanjem ' UTF-8 ' kot kodiranje znakov. Java nudi še en preobremenjen konstruktor v razredu String, ki sprejema kodiranje znakov.

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

Primer

V naslednjem primeru smo uporabili StandardCharset.UTF_8 da določite kodiranje.

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

Izhod:

Kako pretvoriti niz bajtov v niz v Javi

Primer

V naslednjem primeru smo med ustvarjanjem niza bajtov vzeli char. Deluje zaradi autoboxinga. Znak 'T' se pretvori v 84 v nizu bajtov in tako naprej. Zato je izhod obeh nizov bajtov enak.

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

Izhod:

Kako pretvoriti niz bajtov v niz v Javi

Razred String ima tudi konstruktor, v katerega lahko posredujemo niz bajtov in nabor znakov kot argument. Tako lahko naslednji stavek uporabite tudi za pretvorbo niza bajtov v niz v Javi.

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

Razred String ima tudi konstruktor za pretvorbo podnabora niza bajtov v niz.

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

Oglejmo si še en primer, v katerem je uporabljeno drugačno kodiranje.

Primer

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

Izhod:

Kako pretvoriti niz bajtov v niz v Javi