Я конвертирую 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 это символ переноса строки. Но мне непонятно, как он может появиться самостоятельно, ведь я работаю с числами и байтами, а не со строками.
С чем может быть связано такое поведение и как мне устранить этот баг ?
Я полагаю, что где-то происходит сбой и файл воспринимается как текстовый и вступает в действие system dependent умолчания когда конец строки для Windows это комбинация <LF><CR>, а для Unix просто <CR>. Попробуйте использовать RandomAccessFile
Если все действительно так как вы описали - тема достойна для публикации бага в Java
Сборка персонального компьютера от Artline: умный выбор для современных пользователей