Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中序列化和反序列化后如何保留引用?_Java_Oop_Serialization_Reference - Fatal编程技术网

在Java中序列化和反序列化后如何保留引用?

在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的情况下是完整的。

如果A引用了C,而B引用了C,我如何序列化整个过程,以便在反序列化之后所有引用都不会丢失?

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初学者:我认为如果你选择了正确的东西进行序列化,它会“正常工作”;但您必须了解流程的工作范围。