Serializable 和 Externalizable 接口的关系

 Serializable 接口是序列化的最顶层接口,Externalizable是它的补充,用于可定制的序列化过程。

声明为Serializable 将会在序列化的过程中使用“默认”的方式来存储和重建对象。例如,在进行序列化的ObjectInputStream或其子类对象中,对实现Serializable的对象的处理有JDK“默认”的方式,当然,也可以通过继承和覆写指定对引用和复杂数据结构的处理,但主要的处理逻辑还是在ObjectInputStream类里,这显然不太合理,毕竟对处理的object如何序列化的解释者是该对象的编写者,不是么?

按照前面的思路,于是就有了Externalization接口,声明此接口的类可实现完全自定义的对象存储和重建方式,对,这样就使得对象的序列化方式和对象类“绑定”到一起了。这种设计方式看似很好,但每个类都去编写实现序列化的防范,得把人累死啊。

实践证明,JDK”默认“的方式更好——早期版本的java,反射机制非常缓慢,序列化大型对象存在性能问题,Externalization接口的另外一个意义也在于能突破反射的性能瓶颈。而得益于Java 1.3之后更快的反射机制,JDK自动化的对象序列化处理才突显出优势,毕竟在需要序列化的场景,没人愿意每写一个类都去实现一遍序列化方法吧?

Externalization接口也还有存在的必要,RMI部分就是很好的例子。


你可能感兴趣的:(Serializable 和 Externalizable 接口的关系)