【发布时间】:2018-09-27 11:39:35
【问题描述】:
Java 序列化会产生重复的实例吗?如果有,是浅复制还是深复制?
我有几个具有以下设置的课程:
public class A{
public C c;
}
public class B {
public C c;
}
public class C implements Serializable {
...
}
public class Wrapper implements Serializable {
public C c;
}
我有一个通过字节数组传递对象的组件,一旦序列化过程结束,ObjectOutputStream/ObjectInputStream 就会被关闭。
首先,我将 A.c 序列化并传递给 B.c。 B.c 是 A.c 的复制品吗? 然后,我在 B 中创建了一个包装器类并包装了 B.c。现在,如果我序列化包装器实例,将其传递给 A 并在 A 中反序列化它,那么被包装的 c 将是什么?参考 B.c?还是一个全新的 C 实例?
伪代码:
{
...
A a = new A();
B b = new B();
C c = new C();
a.c = c;
}
{
//Somewhere in A
byte[] cData = SomethingThatSerializesObjects.Serialize(c);
b.c = SomethingThatSerializesObjects.Deserialize(cData);
//Is b.c a duplication of a.c?
}
{
//Somewhere in B
Wrapper wrapper = new Wrapper();
wrapper.c = c;
byte[] wrapperData = SomethingThatSerializesObjects.Serialize(wrapper);
//Give the wrapperData to a
}
{
//And somewhere in A
//Receives wrapperData
Wrapper wrapper = SomethingThatSerializesObjects.Deserialize(wrapperData);
C tmp = wrapper.c;
//Is tmp a reference to b.c? Or a new C instance?
}
【问题讨论】:
标签: java serialization