A bájttömb karakterláncsá alakításának folyamatát dekódolásnak nevezzük. Ehhez a folyamathoz Charset szükséges. Ennek ellenére a karakterkészletet kellene használnunk dekódolás egy bájttömb.
Kétféleképpen lehet bájttömböt karakterláncsá konvertálni:
- Használva String osztály konstruktor
- Használva UTF-8 kódolás
A String Class Constructor használatával
A bájttömb karakterláncsá alakításának legegyszerűbb módja, ha a String osztályú konstruktort byte[] konstruktor argumentumaként használhatjuk.
String str=new String(bytes);
Példa
A következő példa nem használ karakterkódolást.
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(); } } }
Kimenet:
UTF-8 kódolás használatával
Ne felejtse el a karakterkódolást, miközben a bájttömböt String-re konvertálja. Mivel a bájtok a bináris adatok, míg a String karakteradat. Fontos tudni annak a szövegnek az eredeti kódolását, amelyből a bájttömb létrejött. Ha más karakterkódolást használunk, nem kapjuk vissza az eredeti karakterláncot.
Az ubuntu build elengedhetetlen
Tegyük fel, hogy egy bájttömböt kell beolvasnunk egy fájlból, amelynek kódja ' ISO_8859_1 '. A bájttömb karakterláncsá alakításakor nincs karakterkódolásunk. A bájttömböt String-be konvertáljuk a String osztály konstruktorával, de ez nem garantálja, hogy ugyanazt a szöveget kapjuk vissza. Ennek az az oka, hogy a String osztály konstruktora a platform alapértelmezett kódolását használja.
A bájtok 8 bitet tartalmaznak, amelyek legfeljebb 256 különböző értékkel rendelkezhetnek. ASCII karakterkészlethez működik, ahol csak hét bitet használnak. Ha a karakterkészletek 256-nál több értékkel rendelkeznek, akkor kifejezetten meg kell adnunk a kódolást, amely megmondja, hogyan kell a karaktereket bájtsorozatba kódolni.
A Java platform a következő karakterkészleteket támogatja:
lexikográfiailag
- StandardCharsets.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
Ha nem emlékszünk a pontos kódolásra, ilyen esetekben a platformunk nem tudja megfelelően konvertálni a speciális karaktereket. Ezt a problémát úgy oldják meg, hogy ' UTF-8 ' karakterkódolásként. A Java egy másik túlterhelt konstruktort biztosít a String osztályban, amely elfogadja a karakterkódolást.
new String(byte[], 'character encoding');
Példa
A következő példában használtuk StandardCharset.UTF_8 a kódolás megadásához.
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(); } } }
Kimenet:
Példa
A következő példában a bájttömb létrehozásakor char-ot vettünk. Az autobox miatt működik. A „T” karakter 84-re lesz konvertálva a bájttömbben és így tovább. Ezért mindkét bájttömb kimenete ugyanaz.
Java programozási prímszámok
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); } }
Kimenet:
A String osztálynak van egy konstruktora is, amelyben byte tömböt és Charset-et adhatunk át argumentumként. Tehát a következő utasítás használható a bájttömb stringgé konvertálására is Java nyelven.
String str = new String(byteArray, StandardCharsets.UTF_8)
A String osztálynak van egy konstruktora is, amely a bájttömb egy részhalmazát Stringgé konvertálja.
String(byte[] bytes, int offset, int length, String charsetName)
Lássunk egy másik példát, amelyben más kódolást használnak.
Példa
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(); } } }
Kimenet: