Processen att konvertera en byte-array till en sträng kallas avkodning. Denna process kräver en teckenuppsättning. Men vi bör använda teckenuppsättning för avkodning en byte-array.
Det finns två sätt att konvertera byte array till String:
- Genom att använda Strängklasskonstruktör
- Genom att använda UTF-8-kodning
Genom att använda String Class Constructor
Det enklaste sättet att konvertera en byte-array till String, vi kan använda String-klassens konstruktor med byte[] som konstruktorargument.
String str=new String(bytes);
Exempel
Följande exempel använder ingen teckenkodning.
räv eller varg
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(); } } }
Produktion:
q1 q2 q3 q4
Genom att använda UTF-8-kodning
Kom ihåg teckenkodningen när du konverterar byte-arrayen till String. Eftersom bytes är binära data medan String är teckendata. Det är viktigt att känna till den ursprungliga kodningen av texten från vilken byte-matrisen har skapats. När vi använder en annan teckenkodning får vi inte tillbaka den ursprungliga strängen.
Anta att vi måste läsa byte array från en fil som är kodad i ' ISO_8859_1 '. Vi har ingen teckenkodning när vi konverterar byte-array till sträng. Vi konverterar byte array till String genom att använda String class constructor, men det ger ingen garanti för att vi kommer att få tillbaka samma text. Det beror på att konstruktören av klassen String använder plattformens standardkodning.
Bytes rymmer 8 bitar som kan ha upp till 256 distinkta värden. Det fungerar för ASCII-teckenuppsättning, där endast sju bitar används. Om teckenuppsättningarna har fler än 256 värden, bör vi uttryckligen ange kodningen som talar om hur man kodar tecken till en sekvens av byte.
Det finns följande teckenuppsättningar som stöds av Java-plattformen:
- StandardCharsets.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
När vi inte kommer ihåg exakt kodning kan vår plattform i sådana fall inte konvertera dessa specialtecken ordentligt. Detta problem löses genom att tillhandahålla ' UTF-8 ' som teckenkodning. Java tillhandahåller en annan överbelastad konstruktor i String-klassen som accepterar teckenkodning.
new String(byte[], 'character encoding');
Exempel
I följande exempel har vi använt StandardCharset.UTF_8 för att ange kodningen.
rudyard kipling om förklaring
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(); } } }
Produktion:
Exempel
I följande exempel har vi tagit char när vi skapade byte-arrayen. Det fungerar på grund av autoboxning. Tecknet 'T' konverteras till 84 i byte-arrayen och så vidare. Det är därför utdata från båda byte-arrayerna är densamma.
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); } }
Produktion:
Kat timpf
Klassen String har också en konstruktor där vi kan skicka byte array och Charset som ett argument. Så följande påstående kan också användas för att konvertera byte array till String i Java.
String str = new String(byteArray, StandardCharsets.UTF_8)
Klassen String har också en konstruktor för att konvertera en delmängd av byte-arrayen till String.
String(byte[] bytes, int offset, int length, String charsetName)
Låt oss se ett annat exempel där olika kodning används.
Exempel
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(); } } }
Produktion: