Der Vorgang der Konvertierung eines Byte-Arrays in einen String wird als Decodierung bezeichnet. Für diesen Vorgang ist ein Zeichensatz erforderlich. Allerdings sollten wir den Zeichensatz für verwenden Dekodierung ein Byte-Array.
Es gibt zwei Möglichkeiten, ein Byte-Array in einen String zu konvertieren:
- Durch die Nutzung Konstruktor der String-Klasse
- Durch die Nutzung UTF-8-Kodierung
Mithilfe des String-Klassenkonstruktors
Der einfachste Weg, ein Byte-Array in einen String umzuwandeln, besteht darin, den String-Klassenkonstruktor mit byte[] als Konstruktorargument zu verwenden.
ipconfig unter Ubuntu
String str=new String(bytes);
Beispiel
Das folgende Beispiel verwendet keine Zeichenkodierung.
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(); } } }
Ausgabe:
Durch die Verwendung der UTF-8-Kodierung
Denken Sie beim Konvertieren des Byte-Arrays in einen String an die Zeichenkodierung. Da es sich bei Bytes um Binärdaten handelt, handelt es sich bei String um Zeichendaten. Es ist wichtig, die ursprüngliche Kodierung des Textes zu kennen, aus dem das Byte-Array erstellt wurde. Wenn wir eine andere Zeichenkodierung verwenden, erhalten wir nicht die ursprüngliche Zeichenfolge zurück.
Angenommen, wir müssen ein Byte-Array aus einer Datei lesen, die in „ ISO_8859_1 '. Beim Konvertieren eines Byte-Arrays in einen String gibt es keine Zeichenkodierung. Wir konvertieren das Byte-Array mithilfe des String-Klassenkonstruktors in einen String. Dies bietet jedoch keine Garantie dafür, dass wir denselben Text zurückerhalten. Dies liegt daran, dass der Konstruktor der String-Klasse die Standardcodierung der Plattform verwendet.
Bytes enthält 8 Bits, die bis zu 256 unterschiedliche Werte haben können. Es funktioniert für den ASCII-Zeichensatz, bei dem nur sieben Bits verwendet werden. Wenn die Zeichensätze mehr als 256 Werte haben, sollten wir explizit die Kodierung angeben, die angibt, wie Zeichen in eine Bytefolge kodiert werden.
Die folgenden von der Java-Plattform unterstützten Zeichensätze sind:
lexikografisch
- StandardCharsets.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
Wenn wir uns nicht an die genaue Kodierung erinnern, ist unsere Plattform in solchen Fällen nicht in der Lage, diese Sonderzeichen richtig zu konvertieren. Dieses Problem wird durch die Bereitstellung von gelöst: UTF-8 ' als Zeichenkodierung. Java bietet einen weiteren überladenen Konstruktor in der String-Klasse, der Zeichenkodierung akzeptiert.
new String(byte[], 'character encoding');
Beispiel
Im folgenden Beispiel haben wir verwendet StandardCharset.UTF_8 um die Codierung anzugeben.
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(); } } }
Ausgabe:
Beispiel
Im folgenden Beispiel haben wir beim Erstellen des Byte-Arrays char verwendet. Es funktioniert aufgrund des Autoboxings. Das Zeichen „T“ wird im Byte-Array in 84 umgewandelt und so weiter. Deshalb ist die Ausgabe beider Byte-Arrays gleich.
Zeichen in int in Java umwandeln
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); } }
Ausgabe:
Die String-Klasse verfügt außerdem über einen Konstruktor, in dem wir ein Byte-Array und einen Zeichensatz als Argument übergeben können. Daher kann die folgende Anweisung auch zum Konvertieren eines Byte-Arrays in einen String in Java verwendet werden.
String str = new String(byteArray, StandardCharsets.UTF_8)
Die String-Klasse verfügt außerdem über einen Konstruktor zum Konvertieren einer Teilmenge des Byte-Arrays in String.
String(byte[] bytes, int offset, int length, String charsetName)
Sehen wir uns ein weiteres Beispiel an, in dem eine andere Kodierung verwendet wird.
Beispiel
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(); } } }
Ausgabe: