- 首页
- 作品
- Java工程师成神之路
- Serializable 与 Externalizable 的区别
Serializable 与 Externalizable 的区别
- Java中的类通过实现
java.io.Serializable
接口以启⽤其序列化功能。 未实现此接口的类将⽆法使其任何状态序列化或反序列化。
- 可序列化类的所有⼦类型本⾝都是可序列化的。
- 序列化接口没有⽅法或字段, 仅⽤于标识可序列化的语义。
- 当试图对⼀个对象进⾏序列化的时候, 如果遇到不⽀持
Serializable
接口的对象。 在此情况下, 将抛NotSerializableException
。
- 如果要序列化的类有⽗类, 要想同时将在⽗类中定义过的变量持久化下来, 那么⽗类也应该集成
java.io.Serializable
接口。
Externalizable
继承了Serializable
, 该接口中定义了两个抽象⽅法:writeExternal()
与readExternal()
。 当使⽤Externalizable
接口来进⾏序列化与反序列化的时候需要开发⼈员重写 writeExternal()
与 readExternal()
⽅法。
- 如果没有在这两个⽅法中定义序列化实现细节, 那么序列化之后, 对象内容为空。
- 实现
Externalizable
接口的类必须要提供⼀个public
的⽆参的构造器。
- 所以, 实现
Externalizable
, 并实现writeExternal()
和readExternal()
⽅法可以指定序列化哪些属性。
下一节:虚拟机是否允许反序列化, 不仅取决于类路径和功能代码是否⼀致, ⼀个⾮常重要的⼀点是两个类的序列化 ID 是否⼀致,即serialVersionUID要求⼀致。