【发布时间】:2015-06-30 06:56:41
【问题描述】:
我正在考虑外部化的目的,因为您可以简单地将属性标记为 transient 并防止其序列化。但是,经过进一步研究,我发现如果您需要在运行时决定需要什么,这种方法(即标记为transient)可能并不理想。从理论上讲,这对我来说是有意义的。但是,实际上我看不到 Externalization 如何对运行时更友好。我的意思是,在类的定义过程中,您仍然必须决定 writeExternal() 和 readExternal() 中需要或不需要什么。那么,这如何对运行时更友好呢?
突出显示的文档如下,
如果通过实施 可序列化的接口,为什么有人要实现 Externalizable 接口又懒得定义这两个方法?简单地 对过程有完全的控制。好吧...让我们采取一个 示例示例来理解这一点。假设我们有一个对象 数百个字段(非瞬态),我们只希望有几个字段 存储在持久存储上,而不是全部。一种解决方案是 将所有其他字段(我们要序列化的字段除外)声明为 瞬态和默认的序列化过程将自动 照顾好那个。但是,如果这几个字段不固定在 设计时间相反,它们是在运行时有条件地决定的。在 在这种情况下,实现 Externalizable 接口可能会 成为更好的解决方案。同样,我们可能在某些情况下 根本不想维护超类的状态(它们是 由 Serializable 接口自动维护 实施)。
【问题讨论】:
-
您真的需要使用
Externalizable,还是Serializable可以使用?您仍然可以提供自定义的读/写方法。 -
transient是从哪里来的?你想做什么transient? -
我不会说它更“运行时友好”,它只是更灵活。因为您可以使用条件、迭代、... 来塑造和过滤您的输出/输入
-
@AndyTurner 请注意,这是一个虚构的代码 sn-p。我的问题的目的是了解与使用
Serializable+transient相比,上述示例如何更“运行时”友好。 -
@bvdb 你有例子来证明你的观点吗?
标签: java transient externalizable