Java Serialization是否适用于循环引用?

时间:2009-11-24 19:50:07

标签: java serialization serializable

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

对象A序列化是否正确?

评论#9 here表示它不起作用。

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

4 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

是的。

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

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();
        a.b = new B();
        a.b.c = new C();
        a.b.c.a = a;
        new ObjectOutputStream( new ByteArrayOutputStream( ) ).writeObject( a );
        System.out.println("It works");

    }    
}

答案 3 :(得分:0)

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

序列化循环引用可能会有点混乱,所以如果可以的话,你可能想要避免使用它们。