Does Java Serialization work for cyclic references?

前端 未结 4 1075
误落风尘
误落风尘 2021-01-01 18:16

For example: Object A contains Object B that contains Object C that contains Object A.

Will Object A serialize properly?

Comment #9 here indicates that it d

相关标签:
4条回答
  • 2021-01-01 18:43

    Yes, Java serialization works for circular references, read here for more information to help your understanding of what Java serialization can do.

    0 讨论(0)
  • 2021-01-01 18:46

    Yes it does.

    I did this very, very, simple test, and at least it finish the serialization. I assume it is correct, but you can check that with some extra lines.

    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");
    
        }    
    }
    
    0 讨论(0)
  • 2021-01-01 18:49

    You can actually view the referencing firsthand if you serialize your object to XML. The child objects are only serialized once. Any reference (anywhere in the serialized structure) to a child object that has already been serialized will simply point to that object in the file.

    Serializing cyclic references can get a little messy, though, so you might want to avoid them if you can.

    0 讨论(0)
  • 2021-01-01 18:53

    Yes, the default Java serialization works for cyclic references. When you serialize object C, the field will contain a backreference to the already-serialized object A instead of serializing it again.

    0 讨论(0)
提交回复
热议问题