一尘不染

为什么Java需要Serializable接口?

java

我们需要大量的序列化工作,并且必须在使用的每个对象上指定Serializable标签,这是一种负担。特别是当它是第三方类时,我们不能真正更改。

问题是:由于Serializable是一个空接口,并且Java一旦添加便提供了可靠的序列化 implements Serializable-为什么它们不使所有内容都可序列化,仅此而已?


阅读 682

收藏
2020-03-07

共1个答案

一尘不染

序列化充满陷阱。这种形式的自动序列化支持使类内部成为公共API的一部分(这就是javadoc为你提供类的持久化形式的原因)。

为了实现长期持久性,类必须能够解码这种形式,这限制了你可以对类设计进行的更改。这破坏了封装。

序列化也可能导致安全问题。通过能够序列化它所引用的任何对象,类可以访问它通常无法访问的数据(通过解析结果字节数据)。

还有其他问题,例如内部类的序列化形式定义不正确。

使所有类都可序列化将加剧这些问题。请查看有效的Java第二版,特别是项目74:明智地实现可序列化。

2020-03-07