假设我们有三个类:
class foo { // not a singleton
String s;
}
class bar {
foo f;
int i;
}
class baz {
foo sameF;
}
现在我们创建实例。
foo onlyFoo = new foo("the only one");
bar theBar = new bar(onlyFoo, 123);
baz theBaz = new baz(onlyFoo);
接下来,我们希望将它们序列化并存储在一个文件中。如果我们反序列化theBaz,仅修改onlyFoo并再次将theBaz反序列化到文件中,theBar仍然包含原始的onlyFoo,因此存在两个不同版本的onlyFoo。
相反,我希望将theBaz和theBar不包括onlyFoo,将这三个对象分别存储,并且一旦有人反序列化theBaz,我想要给他onlyFoo。如果他再次反序列化更改后的onlyFoo,则theBaz和theBar将具有相同的修改后的onlyFoo,因此如果有人请求一个对象(例如theBar),他将获得带有所有引用对象(onlyFoo)的完整序列化对象,就像正常的序列化过程所返回的那样。
我知道我必须手动和分别存储对象并保持引用,因为默认的序列化无法处理这个问题。我不知道的是如何部分序列化/反序列化Java对象?我需要将基元及其包装器与“更高级”的对象分开并单独存储。
更新
- 我不能修改这些类。
- 我不知道所有的类。它应该适用于我从未听说过的所有可序列化的对象(它们可能是final或不是)