在Java中序列化和反序列化后如何保留引用?
如果A引用了C,而B引用了C,我如何序列化整个过程,以便在反序列化之后所有引用都不会丢失?在Java中序列化和反序列化后如何保留引用?,java,oop,serialization,reference,Java,Oop,Serialization,Reference,如果A引用了C,而B引用了C,我如何序列化整个过程,以便在反序列化之后所有引用都不会丢失? B | ˅ A-->C 我认为这里的问题在于序列化“整个事物”的概念。在Java中,序列化通常是在逐个对象的基础上运行的。如果要序列化的对象具有对其他对象的引用,那么(如果它们本身可序列化),这些引用也将序列化到同一流中 然而,在您的例子中,“整体”由两个不同的对象图组成(就序列化而言):a引用了c,b也引用了c。如果c没有对a或b的引用,那么序列化c对a或b都没有影响:c在没有a或b的情况下是完整的。
B
|
˅
A-->C
我认为这里的问题在于序列化“整个事物”的概念。在Java中,序列化通常是在逐个对象的基础上运行的。如果要序列化的对象具有对其他对象的引用,那么(如果它们本身可序列化),这些引用也将序列化到同一流中
然而,在您的例子中,“整体”由两个不同的对象图组成(就序列化而言):a引用了c,b也引用了c。如果c没有对a或b的引用,那么序列化c对a或b都没有影响:c在没有a或b的情况下是完整的。但是序列化a将包括对c的引用,序列化b将包括对c的引用,并且没有迹象表明这些c是“相同的”。当a和b被反序列化时,它们将各自引用一个对象“c”,但它们不会引用同一个实例:它们将是具有相同状态的两个不同实例。无论是否可取,序列化都是克隆对象的好方法
要序列化“整件事”,您需要一个链接所有对象的单一对象图,这样您就可以在一次操作中序列化整个图。它应该可以正常工作-您能给出一个失败的例子吗?抱歉我的无知,但是什么是readSerial?这是一种方法吗?如果是这样的话,这是一种什么课程的方法?@cpp初学者,这应该是一个小错误。我把它改成了反序列化。这是我的想法,但是Jon Skeet的评论表明我们可能遗漏了什么?这应该是解决方案。非常感谢。@cpp初学者:我认为如果你选择了正确的东西进行序列化,它会“正常工作”;但您必须了解流程的工作范围。