запись многих объектов java в один файл
Как я могу записать много сериализуемых объектов в один файл, а затем прочитать несколько объектов по мере необходимости?
4 ответов
вам придется реализовать аспект индексирования самостоятельно, но в противном случае это можно было бы сделать. Когда вы сериализуете объект, вы по существу возвращаете OutputStream
, который вы можете указать, где вы хотите. Хранение нескольких объектов в файле таким образом было бы простым.
трудная часть приходит, когда вы хотите прочитать "несколько" объектов назад. Как вы собираетесь узнать, как искать позицию в файле, который содержит конкретный объект, который вы хотите? Если вы всегда чтение объектов обратно в том же порядке, в котором вы их написали, с начала файла и далее, это не будет проблемой. Но если вы хотите иметь случайный доступ к объектам в "середине" потока, вам придется придумать какой-то способ определить смещение байтов конкретного объекта, который вас интересует.
(этот метод не имеет ничего общего с синхронизацией или даже Java как таковой, вы должны разработать схему, которая будет соответствовать вашим требованиям и окружающая среда.)
часть сочинительства легка. Вы просто должны помнить, что вы должны написать все объекты "сразу". Вы не можете создать файл с сериализованными объектами, закрыть его и открыть снова, чтобы добавить другие объекты. Если вы попробуете это, вы получите сообщения об ошибках при чтении.
для десериализации, я думаю, вам нужно обработать полный файл и сохранить объекты, которые вас интересуют. Остальные будут созданы, но собраны ГК в следующий раз.
Я бы использовать База Данных Плоских Файлов (e. г. Berkeley DB Java Edition). Просто напишите свои узлы как строки в таблице, например:
Node
----
id
value
parent_id