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