Поиск позиции файла доступа к Java, как узнать размер записи
Я хочу переместить файловый дескриптор в начало записи. У меня есть класс с именем Запись. Например, согласно параметру, скажем, 4, я хочу получить доступ к началу 4. записи. Таким образом, я думаю, что я буду использовать метод поиска. Но мне нужен размер записи. на языке c, я могу сказать, что перейти к
f seek(3*(size of(Record)))
но в Java, как не мог найти, как узнать мой размер записи. Так как я могу это сделать?
4 ответа
Вы можете сериализовать свой объект в ByteArrayOutputStream, затем вызвать метод потока toByteArray() для получения самого байтового массива, затем вы можете легко получить размер в байтах, вызвав длину в массиве.
Массив байтов - это то, что вы хотите записать в файл.
Если вы посмотрите на http://www.coyotegulch.com/products/itzam/java/index.html вы можете найти базу данных, базовая реализация которой представляет собой связанный список произвольных объектов в файле. Затем автор переходит к использованию схемы индексации для доступа с использованием ключей.
Я использовал это раньше, и это работает - это может быть лучше, чем писать свои собственные.
Может быть, вам поможет следующая ссылка на Java-учебники Oracle для произвольного доступа к файлам.
Что вы использовали для записи данных? Нет никакого способа узнать, насколько велика запись, если вы используете ObjectOutputStream, и вы не можете искать и загружать объекты случайным образом в файл, написанный ObjectOutputStream.
Как насчет того, чтобы сначала поместить записи в структуру данных списка пропусков и записать список пропусков в виде смещений файлов с записями на диск. Вы можете сделать один проход по данным, чтобы заранее найти их сериализованные длины.