Вопрос

Я ищу что -то простое (не предпочтительнее внешнего 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» или байто-эквивалентного).

[1] http://wiki.python.org/moin/usingpickle

Это было полезно?

Решение

Вы выделили байтовый буфер с размер из 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top