java - 我不确定我是否理解 java 中的可序列化是如何工作的

标签 java serializable

我知道它只是保存对象的状态,但是我应该在哪些类中实现这个接口(interface)?

例如,假设您有 4 个类 A、B、C、D:

abstract class A { ... }
class B extends A { ... }
class C extends A { ... }

D 是创建和操作 AB 对象的类:

class D { A a; B b; ... }

如果我想存储程序的状态,我应该只在 D 类和 A 类中实现 Serialized 接口(interface)吗?

还假设有这个 E 类 只是用来帮助 D 中的一些计算。

E 也应该实现 Serialized 吗?对我来说这似乎不正确,因为它只是一个帮助计算的类,并且它不存储任何需要在以后状态中知道的有值(value)的内容。

最佳答案

仅序列化保存需要取回的数据的内容。在这种情况下,A 似乎是可能的候选者。

我不会序列化 D,因为它只是持久对象的聚合...我允许使用一种方法,让我可以在数组中检索 A 及其子级 (getData()) 的所有实例,或者允许我使用其他方法存储一切。然后是另一种方法,让我用 A 数组重建 D。

此外,由于 E 不保存任何数据,因此不需要序列化(没有任何需要持久化的运行时数据)。

B 和 C 将从 A 继承可序列化。

问问自己,如果我重新启动我的应用程序,当我重新打开它时我希望获得哪些数据。尝试使序列化对象尽可能轻量,这样您的生活就会更轻松。

关于java - 我不确定我是否理解 java 中的可序列化是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7471291/

相关文章:

自定义对象的 Android ArrayList - 保存到 SharedPreferences - 可序列化?

java - 为实现接口(interface)的类实现可序列化

c# - 可移植类库 : recommended replacement for [Serializable]

java - Java读取大文件时如何避免OutOfMemory异常

java - 对齐列

java - 3 个数字按升序排列,在 Java 中不使用条件语句。正如我根本无法使用 if 语句

java - Jenkins通过脚本而不是Maven Goal运行maven项目

java - 为什么 webappclassloader 没有被垃圾回收?

Mysql XA 隔离级别

Java 可序列化问题