как я могу записать много сериализуемых объектов в единственный файл и затем считать несколько объектов как и, когда необходимый?
Вам придется реализовать аспект индексации самостоятельно, но в противном случае это можно было бы сделать. Когда вы сериализуете объект, вы, по сути, получаете обратно OutputStream
, который вы можете указать куда угодно. Таким способом было бы просто сохранить несколько объектов в файле.
Сложность наступает, когда вы хотите прочитать «несколько» объектов назад. Как вы узнаете, как найти позицию в файле, которая содержит конкретный объект, который вам нужен? Если вы всегда читаете объекты в том же порядке, в котором вы их написали, с начала файла и далее, это не будет проблемой. Но если вы хотите иметь произвольный доступ к объектам в «середине» потока, вам придется придумать способ определения байтового смещения конкретного интересующего вас объекта.
( Этот метод не имеет ничего общего с синхронизацией или даже с Java как таковой; вам нужно разработать схему, которая будет соответствовать вашим требованиям и среде.)
Я бы использовал базу данных плоских файлов (например, Berkeley DB Java Edition ). Просто запишите свои узлы в виде строк в таблице, например:
Node
----
id
value
parent_id
Пишущая часть проста. Вы просто должны помнить, что вы должны писать все объекты «сразу». Вы не можете создать файл с сериализованными объектами, закрыть его и снова открыть, чтобы добавить больше объектов. Если вы попробуете, вы получите сообщения об ошибках при чтении.
Я думаю, что для десериализации вам нужно обработать весь файл и сохранить интересующие вас объекты. Остальные будут созданы, но собраны сборщиком данных в следующий раз.