Как загрузить конкретный объект из SER-файла

#java #serialization

#java #сериализация

Вопрос:

Я сохраняю свой игровой мир с помощью сериализации. Мир — это, по сути, большой список массивов, содержащий каждый объект карты области. Количество карт областей фиксировано, но они сильно различаются по размеру (от 5-30 МБ каждая). Поэтому я не хочу, чтобы весь мир загружался в память во время выполнения, только определенные карты областей, в которых находятся персонажи игрока.

Возможно ли загрузить определенные карты областей без загрузки всего мира (или, другими словами: загрузка определенного объекта без десериализации всего SER-файла)?Аналогично, мне нужно сохранить определенные карты областей (когда все символы покинули область). Обратите внимание, что размер (в данных) карты области мог значительно измениться, поскольку игрок потенциально мог перемещать сотни объектов из одной области в другую.

Суть этого вопроса в том, что я хочу избежать хранения каждой карты в ее собственном SER-файле. Это было бы МНОГО файлов, которые будут становиться еще больше с каждым сохранением игрока. Итак, моя цель — красиво упаковать его в один сохраненный файл.

Ответ №1:

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

Итак, чтобы ответить на ваш вопрос, я не думаю, что это возможно, потому что способ десериализации сериализуемого заключается в том, что он проходит через все сериализованные поля одно за другим. Вы не можете выбрать что-то из середины SER-файла для десериализации.

Счастливого программирования 🙂

Комментарии:

1. Я боялся этого, судя по подобным вопросам и ответам, я подозревал, что это невозможно. Спасибо за ваше альтернативное предложение. На самом деле это именно то, что я сделал, но потом я понял, что мне нужно десериализовать весь мир (содержащий мой массив карты области) каждый раз, когда персонаж перемещается с одной карты на другую. И только моя тестовая карта (большая) загружается примерно за 1,5 секунды, поэтому, если у меня их 50, время загрузки составляет 2 минуты. И этого не происходит в моей игре! 🙂 Я предполагаю, что тогда мне придется хранить каждую карту в отдельном SER-файле, это просто кажется таким … уродливым.

2. @Frepo наконец-то я могу прокомментировать… просто говорю. Если это работает, это работает 🙂 Кого действительно волнует, если он уродлив?