Il processo di conversione di un array di byte in una stringa è chiamato decodifica. Questo processo richiede un set di caratteri. Tuttavia, dovremmo usare charset for decodifica un array di byte.
Esistono due modi per convertire l'array di byte in String:
- Usando Costruttore di classi String
- Usando Codifica UTF-8
Utilizzando il costruttore di classi String
Il modo più semplice per convertire un array di byte in String è utilizzare il costruttore della classe String con byte[] come argomento del costruttore.
String str=new String(bytes);
Esempio
L'esempio seguente non utilizza alcuna codifica dei caratteri.
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(); } } }
Produzione:
Utilizzando la codifica UTF-8
Ricorda la codifica dei caratteri durante la conversione dell'array di byte in String. Poiché i byte sono i dati binari mentre la stringa è i dati dei caratteri. È importante conoscere la codifica originale del testo da cui è stato creato l'array di byte. Quando utilizziamo una codifica dei caratteri diversa, non otteniamo indietro la stringa originale.
Supponiamo di dover leggere un array di byte da un file codificato in ' ISO_8859_1 '. Non abbiamo alcuna codifica dei caratteri durante la conversione dell'array di byte in stringa. Convertiamo l'array di byte in String utilizzando il costruttore della classe String, ma non fornisce una garanzia che otterremo indietro lo stesso testo. È perché il costruttore della classe String utilizza la codifica predefinita della piattaforma.
sequenza di fibonacci java
I byte contengono 8 bit che possono avere fino a 256 valori distinti. Funziona con il set di caratteri ASCII, dove vengono utilizzati solo sette bit. Se i set di caratteri hanno più di 256 valori, dovremmo specificare esplicitamente la codifica che indica come codificare i caratteri in una sequenza di byte.
I seguenti set di caratteri supportati dalla piattaforma Java sono:
- StandardCharsets.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
Quando non ricordiamo la codifica esatta, in questi casi la nostra piattaforma non è in grado di convertire correttamente quei caratteri speciali. Questo problema viene risolto fornendo ' UTF-8 ' come codifica dei caratteri. Java fornisce un altro costruttore sovraccaricato nella classe String che accetta la codifica dei caratteri.
new String(byte[], 'character encoding');
Esempio
Nell'esempio seguente, abbiamo utilizzato StandardCharset.UTF_8 per specificare la codifica.
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(); } } }
Produzione:
Esempio
Nell'esempio seguente, abbiamo preso char durante la creazione dell'array di byte. Funziona grazie all'autoboxing. Il carattere 'T' viene convertito in 84 nell'array di byte e così via. Ecco perché l'output di entrambi gli array di byte è lo stesso.
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); } }
Produzione:
La classe String ha anche un costruttore in cui possiamo passare array di byte e Charset come argomento. Pertanto la seguente istruzione può essere utilizzata anche per convertire l'array di byte in String in Java.
lessicograficamente
String str = new String(byteArray, StandardCharsets.UTF_8)
La classe String dispone anche di un costruttore per convertire un sottoinsieme dell'array di byte in String.
String(byte[] bytes, int offset, int length, String charsetName)
Vediamo un altro esempio in cui viene utilizzata una codifica diversa.
Esempio
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(); } } }
Produzione: