Как преобразовать массив байта в 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.

Источник Майкл Боргвардт