Сериализация Java: readFields / putFields и Serialized Map - PullRequest
0 голосов
/ 25 августа 2009

В настоящее время мы сериализуем объект сеанса пользователя в базу данных, но объект слишком изменился в последнее время, поэтому мы решили изменить этот процесс. Мы все согласны с тем, что мы не можем сериализовать весь объект, и нам нужно сохранять его поле за полем. Есть 2 предложения,

  1. Сохранение всех полей на карте и сериализация карты.
  2. Использование ObjectOutputStream.putFields().

Мы не видим большой разницы между этими двумя подходами. # 1 использует знакомый интерфейс карты, и им легче пользоваться всем. # 2 предоставляет удобные методы, такие как fields.get("confirmed", false) и т. Д.

Мы склонны идти с # 1. Кто-нибудь знает какие-либо другие преимущества # 2?

Ответы [ 2 ]

1 голос
/ 25 августа 2009

readFields и putFields имеют то преимущество, что вы можете начать с использованием сериализации по умолчанию и добавлять шаблон только тогда, когда вам это нужно.

A Map будет создавать меньшие потоки, если используется один раз, но поток, который хранит множество этих объектов, будет меньше, если он использует readFields / putFields. Это связано с тем, что существует одноразовая служебная нагрузка, описывающая формат потока.

Обратите внимание, что вы всегда должны звонить defaultReadObject / readFields в начале readObject и defaultWriteObject / putFields в начале writeObject. К сожалению, это не проверено.

0 голосов
/ 25 августа 2009

В соответствии с этим сайтом вы можете настроить способ чтения и записи значений, реализовав в своем классе два закрытых метода с именами writeObject (ObjectOutputStream) и readObject (ObjectInputStream). Проверьте сеанс «Настройка протокола по умолчанию» на сайте выше. Это, вероятно, предпочтительный метод, и, если я правильно помню, это также рекомендуемый способ, описанный в книге «Эффективное Java».

Делая это таким образом, вы сохраняете логику того, какие поля должны быть прочитаны / записаны в классе, который содержит поля, что является лучшей инкапсуляцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...