Ответ 1
Да, стандартная сериализация Java работает для циклических ссылок. Когда вы сериализуете объект C, это поле будет содержать обратную ссылку на уже сериализованный объект A, а не сериализовать его снова.
Например: Object A содержит объект B, содержащий объект C, содержащий объект A.
Будет ли сериализован объект Object?
Комментарий # 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();
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");
}
}
Фактически вы можете просмотреть ссылки, если вы сериализуете свой объект в XML. Дочерние объекты только сериализованы один раз. Любая ссылка (в любом месте сериализованной структуры) на дочерний объект, который уже был сериализован, просто укажет на этот объект в файле.
Сериализация циклических ссылок может немного запутаться, поэтому вы можете избежать их, если сможете.