Процес претварања низа бајтова у стринг назива се декодирање. Овај процес захтева Цхарсет. Ипак, требало би да користимо скуп знакова за декодирање низ бајтова.
Постоје два начина да конвертујете низ бајтова у стринг:
- Коришћењем Конструктор класе стринг
- Коришћењем УТФ-8 кодирање
Користећи Стринг Цласс Цонструцтор
Најједноставнији начин да конвертујете низ бајтова у стринг, можемо користити конструктор класе Стринг са бајт[] као аргументом конструктора.
String str=new String(bytes);
Пример
Следећи пример не користи никакво кодирање знакова.
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(); } } }
Излаз:
Коришћењем УТФ-8 кодирања
Запамтите кодирање знакова док конвертујете низ бајтова у стринг. Пошто су бајтови бинарни подаци, док је стринг карактерни податак. Важно је знати оригинално кодирање текста из којег је креиран низ бајтова. Када користимо другачије кодирање знакова, не добијамо оригинални стринг назад.
Претпоставимо да морамо да прочитамо низ бајтова из датотеке која је кодирана у ' ИСО_8859_1 '. Немамо никакво кодирање знакова док конвертујемо низ бајтова у стринг. Конвертујемо низ бајтова у Стринг користећи конструктор класе Стринг, али то не даје гаранцију да ћемо добити исти текст назад. То је зато што конструктор класе Стринг користи подразумевано кодирање платформе.
Бајтови садрже 8 битова који могу имати до 256 различитих вредности. Ради за скуп АСЦИИ знакова, где се користи само седам битова. Ако скупови знакова имају више од 256 вредности, требало би експлицитно да наведемо кодирање које говори како да се кодирају карактери у низу бајтова.
Постоје следећи скупови знакова које подржава Јава платформа:
- СтандардЦхарсетс.ИСО_8859_1
- СтандардЦхарсетс.УС_АСЦИИ
- СтандардЦхарсетс.УТФ_16
- СтандардЦхарсетс.УТФ_16БЕ
- СтандардЦхарсетс.УТФ_16ЛЕ
Када се не сећамо тачног кодирања, у таквим случајевима наша платформа није у стању да правилно конвертује те специјалне знакове. Овај проблем се решава пружањем ' УТФ-8 ' као кодирање знакова. Јава пружа још један преоптерећени конструктор у Стринг класи који прихвата кодирање знакова.
new String(byte[], 'character encoding');
Пример
У следећем примеру користили смо СтандардЦхарсет.УТФ_8 да одредите кодирање.
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(); } } }
Излаз:
Пример
У следећем примеру, узели смо цхар док смо креирали низ бајтова. Ради због аутобокса. Знак 'Т' се конвертује у 84 у низу бајтова и тако даље. Зато је излаз оба низа бајтова исти.
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); } }
Излаз:
Класа Стринг такође има конструктор у којем можемо проследити низ бајтова и Цхарсет као аргумент. Дакле, следећа изјава се такође може користити за претварање низа бајтова у стринг у Јави.
String str = new String(byteArray, StandardCharsets.UTF_8)
Класа Стринг такође има конструктор за претварање подскупа низа бајтова у Стринг.
String(byte[] bytes, int offset, int length, String charsetName)
Хајде да видимо још један пример у коме се користи другачије кодирање.
Пример
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(); } } }
Излаз: