FileOutputStream меняет байт `0A` на `0D 0A`

286
21 апреля 2017, 19:07

Я конвертирую float в byte[] следующим кодом:

byte[] bytes = ByteBuffer.allocate(4).putFloat(number).array();

Соответственно, если я конвертирую, например, число 0.02f я получу байты [60,-93,-41,10] Далее я пытаюсь записать полученные byte[] в файл следующим кодом:

FileOutputStream fos = new FileOutputStream(file);
fos.write(bytes);
dbf.close();

На большинстве платформ полученный файл в HEX-редакторе выглядит так: 3C A3 D7 0A. Но на одном из устройств вместо требуемых 4 байт я получаю 5: 3C A3 D7 0D 0A. Перед каждой 0A самостоятельно прописывается символ 0D

Мне известно, что 0A это символ возврата каретки, а 0D это символ переноса строки. Но мне непонятно, как он может появиться самостоятельно, ведь я работаю с числами и байтами, а не со строками.

С чем может быть связано такое поведение и как мне устранить этот баг ?

Answer 1

Я полагаю, что где-то происходит сбой и файл воспринимается как текстовый и вступает в действие system dependent умолчания когда конец строки для Windows это комбинация <LF><CR>, а для Unix просто <CR>. Попробуйте использовать RandomAccessFile

Если все действительно так как вы описали - тема достойна для публикации бага в Java

READ ALSO
Как работать с GPS во Fragment?

Как работать с GPS во Fragment?

Добрый день, пытаюсь запустить GPS, но не как не могу понять почему в созданном Fragment подчёркивает красным все this а так же getSystemService ?

255
TableLayout и элементы на нем во весь экран

TableLayout и элементы на нем во весь экран

Доброго времени суток! Как сделать что бы элементы (в моем случае кнопки) в контейнере TableLayout занимали все пространство экранаВ ширину я решил...

351
Анимация кнопки

Анимация кнопки

Сделала анимацию кнопки вращение вокруг своей оси в методе setOnTouchListenerА как сделать такую анимацию, чтобы при нажатии на кнопку она тряслась?...

322