java - Java中序列化和反序列化后如何保留引用?

标签 java oop serialization reference

如果 A 具有对 C 的引用,并且 B 具有对 C 的引用,我如何序列化整个事物,以便反序列化后所有引用都不会丢失? 乙 | ˅ A-->C

最佳答案

我认为这里的问题是序列化“整个事情”的概念。在 Java 中,序列化通常在逐个对象的基础上进行操作。如果被序列化的对象引用了其他对象,那么(假设它们本身是可序列化的)这些引用也将被序列化到同一个流中。

但是,在您的情况下,“整个事物”由两个不同的对象图组成(就序列化而言):a 引用了 c,b 也引用了。如果 c 没有对 a 或 b 的引用,则序列化 c 将不会对 a 或 b 产生任何影响:没有 a 或 b 的 c 是完整的。但是序列化 a 将包括对 c 的引用,序列化 b 将包括对 c 的引用,并且不会表明这些 c 是“相同的”。当 a 和 b 被反序列化时,它们最终都会引用对象“c”,但它们不会引用相同的实例:它们将是具有相同状态的两个不同实例。无论是否需要,序列化都是克隆对象的好方法。

要序列化“整个事物”,您需要一个链接所有对象的单个对象图,以便您可以通过一次操作序列化整个图。

关于java - Java中序列化和反序列化后如何保留引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46745163/

相关文章:

serialization - 如果数据表包含拒绝序列化的对象,如何保存数据表?

python - 为什么我们应该更愿意将序列化数据而不是原始代码存储到数据库中?

java - 将 Rest 服务添加到 Struts 应用程序

java - 如何使用 Eclipse Ganymede 创建 dll 项目?

java - 在Java中使用POSTagger将不同的POS(词性)保存在不同的文件中?

php - 在 PHP 中,有没有办法在特定命名空间中获取所有声明的类?

symfony - 如何使用 JMS Serializer 和 Symfony2 实现模型侧加载

java - 使用数组和各种类计算总利润java

java - 具有不同对象参数的重载构造函数

c# - 初始化构造函数/对象的可能方法