如果 A 具有对 C 的引用,并且 B 具有对 C 的引用,我如何序列化整个事物,以便反序列化后所有引用都不会丢失?
乙
|
˅
A-->C
最佳答案
我认为这里的问题是序列化“整个事情”的概念。在 Java 中,序列化通常在逐个对象的基础上进行操作。如果被序列化的对象引用了其他对象,那么(假设它们本身是可序列化的)这些引用也将被序列化到同一个流中。
但是,在您的情况下,“整个事物”由两个不同的对象图组成(就序列化而言):a 引用了 c,b 也引用了。如果 c 没有对 a 或 b 的引用,则序列化 c 将不会对 a 或 b 产生任何影响:没有 a 或 b 的 c 是完整的。但是序列化 a 将包括对 c 的引用,序列化 b 将包括对 c 的引用,并且不会表明这些 c 是“相同的”。当 a 和 b 被反序列化时,它们最终都会引用对象“c”,但它们不会引用相同的实例:它们将是具有相同状态的两个不同实例。无论是否需要,序列化都是克隆对象的好方法。
要序列化“整个事物”,您需要一个链接所有对象的单个对象图,以便您可以通过一次操作序列化整个图。
关于java - Java中序列化和反序列化后如何保留引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46745163/