Записать и прочитать байт [] из файла
-
11-10-2019 - |
Вопрос
Я ищу что -то простое (не предпочтительнее внешнего LIB), чтобы написать и загружать байт [] из файла. Более или менее что -то вроде [Python's Pickle] [1].
byte[] bytes = new byte[10];
ByteBuffer bbuf = new ByteBuffer.allocate(bytes.length);
bbuf.wrap(bytes); // edited due to Jon Skeet's answer
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();
Похоже, что проблема заключается в том, что я не могу прочитать структуру объекта из такого файла. Кроме того, в шестигранном редакторе файл «Somebytes» содержит только пару или 0. Таким образом, это не кажется, что FileOutputStream вкладывает в него какое-либо из контента («T» или байто-эквивалентного).
Решение
Вы выделили байтовый буфер с размер из bytes
, но это не значит, что байтовый буфер связан с массивом байтов. Вы можете обернуть байтовый массив, используя ByteBuffer.wrap
.
Вот минимальное изменение вашего кода, который делает написать t
в файл:
byte[] bytes = new byte[10];
ByteBuffer bbuf = ByteBuffer.wrap(bytes);
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();
Обратите внимание, что для реального кода вы должны использовать блок Try/, наконец, чтобы убедиться, что файл всегда закрыт независимо от исключений.
Однако это далеко от сериализации. Ява делает иметь свою собственную бинарную сериализацию - см. ObjectOutputStream
а также ObjectInputStream
. Анкет Однако лично я обычно избегаю такого рода сериализации, так как это может быть очень хрупким перед лицом изменений в классах. Существуют различные другие подходы к сериализации, такие как использование буферов по благотворительному или протоколу для бинарной сериализации или сериализация на XML, JSON или какой-то другой читаемый для человека формат.
Другие советы
Вы можете
seek(position)
b = read(length)
Тогда B будет массивом байтов вашей длины.
Извините - на перечитывании вы ищете писать, а не читать.
Более простая версия того же самого.
byte[] bytes = new byte[10];
bytes[1] = 't';
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();
Есть много примеров о том, как читать/записать байт [] из файлов в Интернете. Попробуйте Google.