Запись многих объектов java в один файл

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

Ответы

Ответ 1

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

Жесткая часть приходит, когда вы хотите прочитать "несколько" объектов назад. Как вы узнаете, как искать позицию в файле, который содержит конкретный объект, который вы хотите? Если вы всегда читаете объекты в том же порядке, в котором вы их написали, с самого начала файла это не будет проблемой. Но если вы хотите иметь случайный доступ к объектам в "середине" потока, вам придется придумать какой-то способ определить смещение байта конкретного интересующего вас объекта.

(Этот метод не имеет ничего общего с синхронизацией или даже с Java как таковой, вам нужно разработать схему, которая будет соответствовать вашим требованиям и окружающей среде.)

Ответ 2

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

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

Ответ 3

Сделайте Object[] для хранения ваших объектов. Это сработало для меня.

Ответ 4

Я бы использовал Flat File Database (например, Berkeley DB Java Edition). Просто напишите свои узлы в виде строк в таблице, например:

Node
----
id
value
parent_id