【发布时间】:2012-11-30 17:49:56
【问题描述】:
假设我们有 3 个类:
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 没有 Foo,分别存储三个对象,一旦有人反序列化 theBaz 我也想只给他Foo。如果他再次反序列化更改后的 onlyFoo,theBaz 和 theBar 将具有相同的修改后的 onlyFoo,因此如果有人请求一个对象(例如 theBar),他将获得带有所有引用对象的完整序列化对象(onlyFoo)就像正常的序列化过程会返回一样。
我知道我必须手动单独存储对象并保留引用,因为默认序列化无法处理此问题。 我不知道如何部分序列化/反序列化 Java 对象?我需要将原语及其包装器与“更高”对象分开并单独存储这些对象。
更新
- 我无法修改类。
- 我不知道所有的课程。它应该适用于我可能从未听说过的所有可序列化对象(它们可能是最终的也可能不是最终的)
【问题讨论】:
-
课程是否开放扩展?我的意思是它是最终的还是不是?
-
更新了问题:“我不知道所有课程。它应该适用于我可能从未听说过的所有可序列化对象。我明白了,如果他们是最终的,那也可能是个大问题
-
请考虑接受(复选标记)其中一位abswers
标签: java serialization deserialization binary-serialization