Сериализация объектов, содержащих объекты Java - PullRequest
3 голосов
/ 05 января 2010

Я пытаюсь сериализовать объект, который содержит другой объект, который сам по себе сериализуем.

Есть ли способ заставить его работать? Указатель на другой объект, кажется, потерян, когда я сериализую первый объект.

Ответы [ 7 ]

7 голосов
/ 05 января 2010

Вот два правила относительно постоянных объектов:

  • Правило № 1: объект, который нужно сохранить, должен реализовывать интерфейс Serializable или наследовать эту реализацию от его иерархии объектов
  • Правило № 2: объект, который нужно сохранить, должен пометить все несериализуемые поля как временные

Проверьте статью «Раскройте секреты Java Serialization API» . Это включает исходный код и хорошее объяснение процесса сериализации.

Исходный код, отвечающий "Как мне сериализовать дерево объектов?" также доступно в http://docs.oracle.com/javase/8/docs/technotes/guides/rmi/faq.html#tree

Чтобы узнать некоторые "под капотом" подробности, проверьте эту превосходную статью: Алгоритм сериализации Java показал .

2 голосов
/ 05 января 2010

Все атрибуты объекта Serializable также должны быть сериализованы, если только они не определены как временные.

2 голосов
/ 05 января 2010

«Указатель» действительно потерян. После десериализации создаются новые объекты.

Прежде чем предоставить свой код - проверьте, не определен ли ваш 2-й объект как transient - это прекратит сериализацию Java.

1 голос
/ 05 января 2010

Должно работать нормально, если все сериализуемо. Что вы подразумеваете под «потерянным» указателем (под которым я предполагаю, что вы подразумеваете ссылку)?

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

0 голосов
/ 05 декабря 2014

https://github.com/gadieichhorn/prototype-jpa

Я создал этот проект github, включающий сериализацию в @Lob пожалуйста, проверьте это и дайте мне знать, если у вас есть какие-либо комментарии.

  • Maven
  • jpa - ссылка для затмения - derby
  • slf4j - выход из системы
  • джунит - подголовник

обратная связь приветствуется.

0 голосов
/ 27 апреля 2012

Я точно так же чувствую, значение внутреннего объекта будет также сериализуемым до тех пор, пока оно не будет помечено как переходное. Если внутренний объектный класс не был сериализуемым, он выдает ошибку времени компиляции.

Пожалуйста, дайте нам знать, если вы все-таки решили и если мое понимание неверно.

0 голосов
/ 05 января 2010

Вы можете быть счастливы, используя SOJO . Он довольно легко сериализует всю иерархию Java-объекта.

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