logo

Ako previesť bajtové pole na reťazec v jazyku Java

Proces prevodu bajtového poľa na reťazec sa nazýva dekódovanie. Tento proces vyžaduje znakovú sadu. Mali by sme však použiť znakovú sadu dekódovanie bajtové pole.

Existujú dva spôsoby, ako previesť bajtové pole na reťazec:

  • Používaním Konštruktor triedy reťazcov
  • Používaním UTF-8 kódovanie

Pomocou konštruktora triedy String

Najjednoduchší spôsob, ako previesť bajtové pole na String, môžeme použiť konštruktor triedy String s byte[] ako argumentom konštruktora.

 String str=new String(bytes); 

Príklad

Nasledujúci príklad nepoužíva žiadne kódovanie 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(); } } } 

Výkon:

Ako previesť bajtové pole na reťazec v jazyku Java

Pomocou kódovania UTF-8

Pamätajte na kódovanie znakov pri prevode bajtového poľa na reťazec. Pretože bajty sú binárne údaje, zatiaľ čo reťazec sú znakové údaje. Je dôležité poznať pôvodné kódovanie textu, z ktorého sa vytvorilo bajtové pole. Keď použijeme iné kódovanie znakov, nedostaneme späť pôvodný reťazec.

Predpokladajme, že musíme prečítať bajtové pole zo súboru, ktorý je zakódovaný v ' ISO_8859_1 '. Pri prevode bajtového poľa na reťazec nemáme žiadne kódovanie znakov. Prevádzame bajtové pole na String pomocou konštruktora triedy String, ale neposkytuje záruku, že dostaneme späť rovnaký text. Je to preto, že konštruktor triedy String používa predvolené kódovanie platformy.

Bajty obsahujú 8 bitov, ktoré môžu mať až 256 rôznych hodnôt. Funguje pre znakovú sadu ASCII, kde sa používa iba sedem bitov. Ak majú znakové sady viac ako 256 hodnôt, mali by sme explicitne špecifikovať kódovanie, ktoré hovorí, ako kódovať znaky do sekvencie bajtov.

Platforma Java podporuje nasledujúce znakové sady:

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

Keď si nepamätáme presné kódovanie, v takýchto prípadoch naša platforma nedokáže tieto špeciálne znaky správne previesť. Tento problém je vyriešený poskytnutím „ UTF-8 ' ako kódovanie znakov. Java poskytuje ďalší preťažený konštruktor v triede String, ktorý akceptuje kódovanie znakov.

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

Príklad

V nasledujúcom príklade sme použili StandardCharset.UTF_8 špecifikovať kódovanie.

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

Výkon:

formátovací reťazec java
Ako previesť bajtové pole na reťazec v jazyku Java

Príklad

V nasledujúcom príklade sme pri vytváraní bajtového poľa použili znak. Funguje to vďaka autoboxu. Znak 'T' sa konvertuje na 84 v bajtovom poli a tak ďalej. Preto je výstup oboch bajtových polí rovnaký.

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

Výkon:

Ako previesť bajtové pole na reťazec v jazyku Java

Trieda String má tiež konštruktor, do ktorého môžeme odovzdať bajtové pole a znakovú sadu ako argument. Takže nasledujúci príkaz možno použiť aj na konverziu bajtového poľa na reťazec v jazyku Java.

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

Trieda String má tiež konštruktor na konverziu podmnožiny bajtového poľa na String.

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

Pozrime sa na ďalší príklad, v ktorom sa používa iné kódovanie.

Príklad

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

Výkon:

Ako previesť bajtové pole na reťazec v jazyku Java