Java序列化是否适用于循环引用?

例如:对象A包含对象B,其中包含包含对象A的对象C.

对象A序列化是否正确?

这里的注释#9表示它不起作用。

相反, XStream表示它确实处理循环引用。

是的,默认的Java序列化适用于循环引用。 序列化对象C时,该字段将包含对已经序列化的对象A的反向引用,而不是再次序列化它。

是的,Java序列化适用于循环引用,请阅读此处以获取更多信息,以帮助您理解Java序列化可以执行的操作。

是的,它确实。

我做了这个非常非常简单的测试,至少完成了序列化。 我认为它是正确的,但你可以检查一些额外的行。

import java.io.*; class A implements Serializable { B b; } class B implements Serializable { C c; } class C implements Serializable { A a; } class Test { public static void main( String [] args ) throws IOException { A a = new A(); ab = new B(); abc = new C(); abca = a; new ObjectOutputStream( new ByteArrayOutputStream( ) ).writeObject( a ); System.out.println("It works"); } } 

如果将对象序列化为XML,则可以直接查看引用。 子对象仅序列化一次。 对已经序列化的子对象的任何引用(序列化结构中的任何位置)将仅指向文件中的该对象。

但是,序列化循环引用可能会有点混乱,因此如果可以的话,您可能希望避免使用它们。