2010-01-05 3 views
3

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

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

+4

Да, он должен работать, если оба объекта реализуют Serializable. Какой-то код, пожалуйста! –

+5

показать нам некоторый код. – rodrigoap

ответ

7

Вот два правила, касающиеся стойких объектов:

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

Проверьте статью "Discover the secrets of the Java Serialization API". Он включает исходный код и хорошее объяснение процесса сериализации.

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

Чтобы узнать некоторые «под капотом» детали проверить эту прекрасную статью: The Java serialization algorithm revealed.

+0

Доступные ссылки недоступны. :( – abksrv

+0

Обновленные ссылки ... – JuanZe

1

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

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

2

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

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

2

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

0

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

0

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

Пожалуйста, сообщите нам, если вы действительно решили его, и если мое понимание неверно.

0

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

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

  • Maven
  • JPA - затмение ссылки - котелок
  • SLF4J - Logback
  • JUnit - Hamcrest

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

Смежные вопросы