java中序列化时对象之间的循环依赖关系

java中序列化时对象之间的循环依赖关系,java,serialization,cycle,Java,Serialization,Cycle,在研究Java中的序列化时,我遇到了这样一句话:“当序列化时,对象的整个对象图都被写入流中”。那么,如果对象图中存在循环呢?在这种情况下,反序列化会发生什么?为什么?Java序列化通过“句柄”系统处理循环对象图。以前序列化的对象不会重新序列化:而是序列化该对象的“句柄”,在反序列化时重新构造该句柄以引用同一对象。请参阅。我发现了您所要求的希望,这有助于Java序列化子系统考虑周期。对于同一对象的多个引用。还有其他有趣的事情。如果对象成功序列化,则反序列化它将生成一个图形与原始图形等效的对象。然而

在研究Java中的序列化时,我遇到了这样一句话:“当序列化时,对象的整个对象图都被写入流中”。那么,如果对象图中存在循环呢?在这种情况下,反序列化会发生什么?为什么?

Java序列化通过“句柄”系统处理循环对象图。以前序列化的对象不会重新序列化:而是序列化该对象的“句柄”,在反序列化时重新构造该句柄以引用同一对象。请参阅。

我发现了您所要求的希望,这有助于Java序列化子系统考虑周期。对于同一对象的多个引用。还有其他有趣的事情。如果对象成功序列化,则反序列化它将生成一个图形与原始图形等效的对象。然而,对于这个地点来说,细节太宽泛了。事实上,@MouseEvent,正如你似乎已经发现的那样,我一点也没有错。这是给任何可能有疑问的人的。我们当然可以更深入地讨论这个问题,但正如我所说的,所有细节都太宽泛了。天哪,你自己试过了吗?“看来你应该这么做。”老鼠说,是你完全错了。否则,请解释
ObjectOutputStream.reset()
ObjectOutputStream.writeUnshared()
的用途。你关于“膨胀文件”的说法是荒谬的:句柄比它所代表的对象小。手动处理并不能改善这一点。我也在考虑同样的程序。例如,如果对象已经写入流,那么返回并找出它所在的位置,并在此处提供引用。这与过程不同。你所描述的将创建两个对象。它将如何创建更多的两个对象?“句柄”是什么意思?之前只有一个副本被序列化,如果它再次用于序列化,我们将发现它是否在流之前已经被写入。如果它被序列化,则序列化“句柄”,否则序列化整个对象。@omjego我想它存储对象的方式与存储在内存中的方式类似(每个对象都有一个标识符,对象可以通过标识符保存对其他对象的引用)。