Разница между байтами, полученными от чтения файла и getbytes из строки в Java?

Чтение файла непосредственно в массив байтов дает другой результат по сравнению с чтением данных в String и последующим получением байтов из него.

Какова форма для байтов, считанных непосредственно из файла и как она отличается от байтов get в String.

1 ответ

Чтение файла непосредственно в массив байтов дает другой результат по сравнению с чтением данных в String и последующим получением байтов из него.

Ну, может. И это не так. Это зависит от того, как вы читали файл как текст и как вы преобразовали текст обратно в байты.

Если вы используете одну и ту же кодировку в обоих направлениях, и файл первоначально содержал текст в этой кодировке, вы, скорее всего, получите те же самые байты. Но если вы используете неправильную кодировку (например, вы читаете ISO-8859-1-кодированный текст как UTF-8), или если вы используете разные кодировки для двух преобразований, то вы, скорее всего, получите разные результаты.

Подумайте о том, что текст немного похож на формат изображения - если вы читаете файл.png, а затем записываете файл.jpeg, вы не ожидаете, что иметь одинаковые байты, не так ли? Аналогично, если вы попытаетесь прочитать файл.png с помощью JPEG-декодера, вы ожидаете получить мусор (или, скорее, ошибку).

В принципе, не думайте о тексте как о последовательности байтов - это не так. Подумайте об этом как о совершенно отдельном, с кодировками, используемыми для преобразования текста и двоичных представлений. Дополнительную информацию см. В блоге Marc Gravell в блоге IO.

licensed under cc by-sa 3.0 with attribution.