- 深入理解序列化与反序列化
- 潘洪安
- 502字
- 2025-02-25 09:58:18
2.1 Java序列化入门
2.1.1 Java序列化实现方式
Java序列化的实现方式有以下三种。
1)自定义类实现Serializable,不包含readObject和writeObject方法,使用默认的序列化和反序列化方式进行数据写入和读取操作,如以下代码所示。

2)自定义类实现Serializable,同时包含readObject和writeObject方法,使用自定义的序列化和反序列化方式进行数据写入和读取操作。readObject方法和writeObject方法的可见性没有限制,可以是private、protected、default、public,如以下代码所示。

3)自定义类实现Externalizable,通过覆盖readExternal方法和writeExternal方法来实现序列化和反序列化功能。readExternal方法和writeExternal方法的可见性没有限制,可以是private、protected、default、public。此外,还需要定义无参构造函数,如以下代码所示。

2.1.2 Java序列化应用
Java序列化输出通过ObjectOutputStream来实现,应用案例如以下代码所示。


通过上述代码可以看出,Java序列化使用起来很简洁。结合2.1.1节的内容,读者应该会有以下几个疑问:
1)自定义的Person类实现了Serializable,那么Serializable起什么作用呢?
2)Serializable和Externalizable有什么区别呢?什么场景使用Serializable?什么场景使用Externalizable?
3)为什么需要定义一个serialVersionUID常量,这个常量的意义是什么?(除此以外,这个常量的定义为什么不是全部大写?)
4)ObjectOutputStream调用writeObject方法就实现了对象序列化功能,writeObject方法在内部做了什么事情使得Java序列化应用起来如此简洁?
带着这些疑问,我们开始深入了解Java序列化技术的原理。