Запись и чтение байта [] из файла

Я ищу что-то простое (желательно без внешней библиотеки) для записи и загрузки байта [] из файла. Более или менее что-то вроде [рассола Питона][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();

Кажется, проблема в том, что я не могу прочитать структуру объекта из такого файла. Кроме того, в hex-редакторе файл "somebytes" содержит пару или 0. Так что не похоже, что FileOutputStream помещает в него какой-либо контент ("t" или эквивалент в байтах).

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

3 ответа

Решение

Вы выделили байтовый буфер с размером 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 / finally, чтобы убедиться, что файл всегда закрыт независимо от исключений.

Тем не менее, это далеко от сериализации. У Java есть своя собственная двоичная сериализация - смотрите ObjectOutputStream а также ObjectInputStream, Лично я обычно избегаю такого рода сериализации, поскольку она может быть очень хрупкой перед лицом изменений в классах. Существуют различные другие подходы к сериализации, такие как использование Thrift или протокольных буферов для двоичной сериализации или сериализация в 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();

Существует множество примеров того, как читать / записывать байты [] из файлов в Интернете. попробуйте гугл.

Другие вопросы по тегам