Proces převodu bajtového pole na řetězec se nazývá dekódování. Tento proces vyžaduje znakovou sadu. Měli bychom však použít znakovou sadu dekódování bajtové pole.
řetězec obsahuje java
Existují dva způsoby, jak převést bajtové pole na řetězec:
- Používáním Konstruktor třídy řetězců
- Používáním UTF-8 kódování
Pomocí konstruktoru třídy String
Nejjednodušší způsob, jak převést bajtové pole na String, můžeme použít konstruktor třídy String s byte[] jako argument konstruktoru.
String str=new String(bytes);
Příklad
Následující příklad nepoužívá žádné kódování znaků.
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ýstup:
lexikograficky
Pomocí kódování UTF-8
Pamatujte na kódování znaků při převodu bajtového pole na řetězec. Protože bajty jsou binární data, zatímco řetězec je znaková data. Je důležité znát původní kódování textu, ze kterého bylo vytvořeno bajtové pole. Když použijeme jiné kódování znaků, nedostaneme zpět původní řetězec.
Předpokládejme, že musíme číst bajtové pole ze souboru, který je zakódován v ' ISO_8859_1 '. Při převodu bajtového pole na řetězec nemáme žádné kódování znaků. Převádíme bajtové pole na String pomocí konstruktoru třídy String, ale neposkytuje záruku, že dostaneme zpět stejný text. Je to proto, že konstruktor třídy String používá výchozí kódování platformy.
Bajty obsahují 8 bitů, které mohou mít až 256 různých hodnot. Funguje pro znakovou sadu ASCII, kde se používá pouze sedm bitů. Pokud znakové sady mají více než 256 hodnot, měli bychom explicitně specifikovat kódování, které říká, jak kódovat znaky do sekvence bajtů.
Existují následující znakové sady podporované platformou Java:
- Standardní znakové sady.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
Když si nepamatujeme přesné kódování, v takových případech naše platforma nedokáže tyto speciální znaky správně převést. Tento problém je vyřešen poskytnutím „ UTF-8 ' jako kódování znaků. Java poskytuje další přetížený konstruktor ve třídě String, který přijímá kódování znaků.
new String(byte[], 'character encoding');
Příklad
V následujícím příkladu jsme použili StandardCharset.UTF_8 k určení kódování.
není null v js
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ýstup:
Příklad
V následujícím příkladu jsme při vytváření bajtového pole vzali znak. Funguje to díky autoboxu. Znak 'T' se převádí na 84 v poli bajtů a tak dále. Proto je výstup obou bajtových polí stejný.
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ýstup:
Třída String má také konstruktor, do kterého můžeme předat bajtové pole a Charset jako argument. Takže následující příkaz lze také použít k převodu bajtového pole na String v Javě.
String str = new String(byteArray, StandardCharsets.UTF_8)
Třída String má také konstruktor pro převod podmnožiny bajtového pole na String.
co je příkaz export v linuxu
String(byte[] bytes, int offset, int length, String charsetName)
Podívejme se na další příklad, ve kterém je použito odlišné kódování.
Pří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ýstup: