2010-01-05 74 views
3

我尝试序列化包含本身可序列化的其他对象的对象。序列化包含对象的对象java

有没有办法让它工作?当我序列化第一个对象时,指向另一个对象的指针似乎丢失了。

+4

是的,它应该工作,如果两个对象实现Serializable。一些代码,请! – 2010-01-05 15:49:58

+5

给我们展示了一些代码。 – rodrigoap 2010-01-05 15:51:09

回答

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 2015-03-17 05:17:42

+0

链接更新... – JuanZe 2015-03-17 14:44:36

1

它应该工作得很好,只要所有东西都是可序列化的。指针(我假定你指的是参考)指的是什么意思是“丢失”?

您能否提供一个简短但完整的程序来演示问题?诚然,Java二进制序列化有时可能会很烦琐,但这应该可以很好地工作。

2

“指针”确实丢失了。反序列化后,构建新的对象。

在提供代码之前 - 检查第二个对象是否未定义为transient - 这会停止java序列化。

2

Serializable对象的所有属性都应该被序列化,除非它们被定义为transient。

0

您可能会很高兴使用SOJO。它很容易地序列化Java对象的整个层次结构。

0

我完全同样感觉,内部对象的值也是可序列化的,除非它被标记为瞬态。如果内部对象类不可序列化,那么它会引发编译时错误。

请让我们知道,如果你确实解决了它,如果我的理解是错误的。

0

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

我创造了这个项目的GitHub包括一些串行化为@Lob 请检查出来,并让我知道如果您有任何意见。

  • 行家
  • JPA - 日食链接 - 德比
  • SLF4J - 的logback
  • 的JUnit - hamcrest

反馈欢迎。