Поиск позиции файла доступа Java, как узнать размер записи - PullRequest
0 голосов
/ 04 июня 2011

Я хочу переместить файловый дескриптор в начало записи. У меня есть класс с именем Запись. Например, в соответствии с параметром, скажем, 4, я хочу получить доступ к началу 4. записи. Таким образом, я думаю, что я буду использовать метод поиска. Но мне нужен размер записи. на языке с, я могу сказать, что перейти к

f seek(3*(size of(Record)))

но в Java, как не мог найти, как узнать мой размер записи. Так как я могу это сделать?

Ответы [ 3 ]

1 голос
/ 05 июня 2011

Вы можете сериализовать свой объект в ByteArrayOutputStream, затем вызвать метод потока toByteArray () для получения самого байтового массива, затем вы можете легко получить размер в байтах, вызвав длину в массиве.
Массив байтов - это то, что вы хотите записать в файл.
Если вы посмотрите на http://www.coyotegulch.com/products/itzam/java/index.html, вы можете найти базу данных, базовая реализация которой представляет собой связанный список произвольных объектов в файле. Затем автор переходит к использованию схемы индексации для доступа по ключу.
Я использовал это раньше, и это работает - это может быть лучше, чем писать ваши собственные.

0 голосов
/ 04 июня 2011

Как насчет того, чтобы сначала поместить записи в список пропущенных данных структуру данных и записать список пропусков в виде файловых смещений с записями на диск. Вы можете сделать один проход по данным, чтобы заранее определить их сериализованные длины.

0 голосов
/ 04 июня 2011

Что вы использовали для записи данных?Нет никакого способа узнать, насколько велика запись, если вы используете ObjectOutputStream, и вы не можете искать и загружать объекты случайным образом в файл, написанный ObjectOutputStream.

...