Serialized对象有什么区别,因为它可以持久化?

时间:2010-02-15 18:04:30

标签: java serialization

我们知道Serializable是一个标记接口(即没有任何方法的接口)。

所以我想知道如何实现这个接口使得实现类的对象被持久化,除了名称Serializable之外没有任何东西用于此接口。

通过实现此接口,我们还有其他任何功能。

我们可以创建一个类似的标记界面,使用不同的名称进行相同的工作吗?(这个问题只是尝试。)

编辑:我可以扩展Serializable接口吗?并且扩展接口也将具有相同的属性。

3 个答案:

答案 0 :(得分:4)

听起来很简单但不是。

此接口仅用于确保开发人员了解并了解序列化的后果(仅将所需数据发送到线路,并通过将其标记为transient来避免发送无用信息)

如果不使用它,可能会在线路上投入大量无用的字节,而不需要它们。使用序列化的应用程序将大部分感知执行时间用于将数据传输到磁盘或通过网络等。

通过强迫开发人员说“是的,我想这样做”,希望至少他们步一分钟说(我能序列化这些可以在以后计算的大数据吗?)

这不一定总是发生。

  

我们通过实现此界面还有其他任何功能。

不,就是这样。

  

我们可以创建一个类似的标记界面,使用不同的名称进行相同的工作吗?(这个问题只是尝试。)

不,这是特别的。您可以尝试自定义serialization机制,但这是一个不同的故事。

使用序列化时必须注意许多其他事项,例如安全性和灵活性。为此,我建议你阅读

第74项:明智地实施Serializable Effective Java Book上。

以下是该项目的开始方式:

  

...因为这很容易做到,所以有一种常见的误解,认为序列化对程序员来说需要很少的努力。事实要复杂得多。虽然使类可序列化的直接成本可以忽略不计,但长期成本通常很高。

答案 1 :(得分:2)

Serializable接口,就像你说的那样,只将类定义为可序列化。它没有效果。

由Java序列化机制根据是否标记为Serializable来处理对象。 Java架构师可以很容易地定义一个接口IFoo,每个实现它的类都是可序列化的。

底线:这只是一个名字

答案 2 :(得分:1)

通过实现Serializable接口,您可以告诉JVM它可以保留。它没有其他含义。顺便说一下,它是一个标记界面,而不是“标记”界面。