Как преобразовать массив байта в String в Java?
Как преобразовать массив bytes
в String
без преобразования?.
Я пробовал:
String doc=new String( bytes);
Но файл doc не совпадает с байтами (байты двоичная информация). Например:
String doc=new String( bytes);
byte[] bytes2=doc.getBytes();
bytes
и bytes2
отличаются.
PS: UTF-8 Не работает, потому что он конвертирует несколько байтов в разные значения. Я тестировал и не работает.
PS2: И нет, я не хочу BASE64
.
Ответы
Ответ 1
Вам нужно указать кодировку, которую вы хотите, например. для UTF-8
String doc = ....
byte[] bytes = doc.getBytes("UTF-8");
String doc2 = new String(bytes, "UTF-8");
doc
и doc2
будут одинаковыми.
Чтобы декодировать a byte[]
, вам нужно знать, какая кодировка использовалась, чтобы убедиться, что он правильно декодирует.
Ответ 2
Здесь один из способов преобразования массива байтов в String
и обратно:
String doc=new String(bytes, "ISO-8859-1");
byte[] bytes2=doc.getBytes("ISO-8859-1");
A String
- это последовательность символов, поэтому вам нужно каким-то образом закодировать байты как символы. Кодировка ISO-8859-1
отображает единственный уникальный символ для каждого байта, поэтому его можно использовать для преобразования. Обратите внимание, что другие кодировки, такие как UTF-8
, в этом смысле небезопасны, потому что есть последовательности байтов, которые не соответствуют действительным строкам в этих кодировках.
Ответ 3
"Правильное преобразование" между байтом [] и строкой - это явно указать кодировку, которую вы хотите использовать. Если вы начинаете с байта [], и на самом деле он не содержит текстовых данных, нет "правильного преобразования". Строки для текста, byte [] - для двоичных данных, и единственно разумная вещь - избегать конвертации между ними, если вам не нужно.
Если вы действительно должны использовать String для хранения двоичных данных, самым безопасным способом является использование Base64.
Источник Майкл Боргвардт