Baitų masyvo konvertavimo į eilutę procesas vadinamas dekodavimu. Šiam procesui reikalingas simbolių rinkinys. Tačiau turėtume naudoti simbolių rinkinį dekodavimas baitų masyvas.
Yra du būdai konvertuoti baitų masyvą į eilutę:
polimorfizmas Java
- Naudojant Styginių klasės konstruktorius
- Naudojant UTF-8 kodavimas
Naudodami stygų klasės konstruktorių
Paprasčiausias būdas konvertuoti baitų masyvą į eilutę, kaip konstruktoriaus argumentą galime naudoti String klasės konstruktorių su byte[].
String str=new String(bytes);
Pavyzdys
Šiame pavyzdyje nenaudojama jokia simbolių koduotė.
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(); } } }
Išvestis:
char į eilutę
Naudojant UTF-8 kodavimą
Atsiminkite simbolių kodavimą konvertuodami baitų masyvą į eilutę. Kadangi baitai yra dvejetainiai duomenys, o eilutė yra simbolių duomenys. Svarbu žinoti originalią teksto, iš kurio buvo sukurtas baitų masyvas, kodavimą. Kai naudojame kitą simbolių kodavimą, originalios eilutės negrąžiname.
Tarkime, turime nuskaityti baitų masyvą iš failo, kuris užkoduotas ' ISO_8859_1 “. Konvertuodami baitų masyvą į eilutę, neturime jokios simbolių kodavimo. Mes konvertuojame baitų masyvą į String naudodami String klasės konstruktorių, tačiau tai negarantuoja, kad sugrąžinsime tą patį tekstą. Taip yra todėl, kad „String“ klasės konstruktorius naudoja numatytąją platformos kodavimą.
Baituose yra 8 bitai, kurie gali turėti iki 256 skirtingų reikšmių. Jis veikia ASCII simbolių rinkinyje, kuriame naudojami tik septyni bitai. Jei simbolių rinkiniai turi daugiau nei 256 reikšmes, turėtume aiškiai nurodyti kodavimą, kuris nurodo, kaip užkoduoti simbolius į baitų seką.
Yra šie „Java“ platformos palaikomi simbolių rinkiniai:
- StandardCharsets.ISO_8859_1
- StandardCharsets.US_ASCII
- StandardCharsets.UTF_16
- StandardCharsets.UTF_16BE
- StandardCharsets.UTF_16LE
Kai neprisimename tikslios kodavimo, tokiais atvejais mūsų platforma negali tinkamai konvertuoti tų specialiųjų simbolių. Ši problema išspręsta pateikiant UTF-8 ' kaip simbolių kodavimas. „Java“ suteikia dar vieną perkrautą konstruktorių String klasėje, kuri priima simbolių kodavimą.
new String(byte[], 'character encoding');
Pavyzdys
Toliau pateiktame pavyzdyje mes naudojome StandardCharset.UTF_8 kodavimui nurodyti.
java prioriteto eilė
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(); } } }
Išvestis:
Pavyzdys
Šiame pavyzdyje kurdami baitų masyvą paėmėme char. Tai veikia dėl autoboxing. Simbolis „T“ baitų masyve konvertuojamas į 84 ir pan. Štai kodėl abiejų baitų masyvo išvestis yra tokia pati.
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); } }
Išvestis:
kelionė, bet
Styginių klasėje taip pat yra konstruktorius, kuriame kaip argumentą galime perduoti baitų masyvą ir simbolių rinkinį. Taigi šis teiginys taip pat gali būti naudojamas konvertuojant baitų masyvą į eilutę „Java“.
String str = new String(byteArray, StandardCharsets.UTF_8)
Styginių klasėje taip pat yra konstruktorius, skirtas konvertuoti baitų masyvo poaibį į eilutę.
String(byte[] bytes, int offset, int length, String charsetName)
Pažiūrėkime kitą pavyzdį, kuriame naudojamas skirtingas kodavimas.
Pavyzdys
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(); } } }
Išvestis: