Het proces van het converteren van een byte-array naar een String wordt decodering genoemd. Voor dit proces is een tekenset vereist. Hoewel we tekenset moeten gebruiken voor decoderen een byte-array.
Er zijn twee manieren om byte-array naar String te converteren:
- Door het gebruiken van String-klasseconstructor
- Door het gebruiken van UTF-8-codering
Door String Class Constructor te gebruiken
De eenvoudigste manier om een bytearray naar String te converteren, is door de klasseconstructor String te gebruiken met byte[] als constructorargument.
String str=new String(bytes);
Voorbeeld
In het volgende voorbeeld wordt geen tekencodering gebruikt.
java lijstknooppunt
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(); } } }
Uitgang:
wolf versus vos
Door gebruik te maken van UTF-8-codering
Onthoud de tekencodering tijdens het converteren van de byte-array naar String. Omdat bytes de binaire gegevens zijn, terwijl String tekengegevens zijn. Het is belangrijk om de originele codering te kennen van de tekst waaruit de byte-array is gemaakt. Wanneer we een andere tekencodering gebruiken, krijgen we de originele string niet terug.
Stel dat we byte-array moeten lezen uit een bestand dat is gecodeerd in ' ISO_8859_1 '. We hebben geen tekencodering tijdens het converteren van byte-array naar string. We converteren byte-array naar String met behulp van de String-klasseconstructor, maar dit biedt geen garantie dat we dezelfde tekst terugkrijgen. Dit komt omdat de constructor van de klasse String de standaardcodering van het platform gebruikt.
Bytes bevatten 8 bits die maximaal 256 verschillende waarden kunnen hebben. Het werkt voor ASCII-tekensets, waarbij slechts zeven bits worden gebruikt. Als de tekensets meer dan 256 waarden hebben, moeten we expliciet de codering specificeren die vertelt hoe tekens in een reeks bytes moeten worden gecodeerd.
Er worden de volgende tekensets ondersteund door het Java-platform:
- Standaardtekensets.ISO_8859_1
- Standaardtekensets.US_ASCII
- Standaardtekensets.UTF_16
- Standaardtekensets.UTF_16BE
- Standaardtekensets.UTF_16LE
Als we de exacte codering niet onthouden, kan ons platform in dergelijke gevallen die speciale tekens niet correct converteren. Dit probleem wordt opgelost door ' UTF-8 ' als tekencodering. Java biedt nog een overbelaste constructor in de klasse String die tekencodering accepteert.
new String(byte[], 'character encoding');
Voorbeeld
In het volgende voorbeeld hebben we gebruikt Standaardtekenset.UTF_8 om de codering op te geven.
git-status -s
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(); } } }
Uitgang:
Voorbeeld
In het volgende voorbeeld hebben we char genomen tijdens het maken van de byte-array. Het werkt dankzij autoboxing. De char 'T' wordt geconverteerd naar 84 in de byte-array, enzovoort. Daarom is de uitvoer van beide byte-arrays hetzelfde.
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); } }
Uitgang:
Hoe een script op Linux uit te voeren
De klasse String heeft ook een constructor waarin we byte-array en Charset als argument kunnen doorgeven. De volgende instructie kan dus ook worden gebruikt om byte-array naar String in Java te converteren.
String str = new String(byteArray, StandardCharsets.UTF_8)
De klasse String heeft ook een constructor om een subset van de byte-array naar String te converteren.
String(byte[] bytes, int offset, int length, String charsetName)
Laten we nog een voorbeeld bekijken waarin verschillende codering wordt gebruikt.
Voorbeeld
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(); } } }
Uitgang: