什么是 serialVersionUID ? 序列化对象时必须提供 serialVersionUID 吗?
1,什么是 serialVersionUID ?
- 顾名思义,serialVersionUID是序列化版本号。
- 所有可序列化的类,都有一个静态serialVersionUID属性;如果我们没有显示定义serialVersionUID,IDE默认提供一个serialVersionUID
2,serialVersionUID 有什么用 ?
- serialVersionUID 用来标识一个可序列化类的版本
- 当我们序列化一个对象时,会将 serialVersionUID 一并写出
- 当我们反序列化一个对象时,会将读入的serialVersionUID与当前类的serialVersionUID作比较。如果相同,则反序列化成功;如果不同,则反序列化失败
3,应不应该显示定义一个 serialVersionUID ?
应该
- 如果没有显示定义serialVersionUID,每当我们对类修改时(比如:添加或删除属性),IDE提供的serialVersionUID的值都会发生改变;此时如果我们想要将之前写出的对象反序列化回来,则会发生异常,因为版本不一致会导致反序列化失败。
- 如果我们显示的定义了serialVersionUID,那么即便我们对类进行了修改,之前序列化的对象依然能够反序列化成功,保证了向前兼容的功能。而如果我们不想向前兼容或者类的改动过大,无法向前兼容,我们可以手动更改 serialVersionUID 的值。
总结:显式定义serialVersionUID给了程序员更大的操作空间,是否向前兼容由程序员来决定
4,如何显示定义serialVersionUID ?
通过IDE自动生成一个serialVersionUID ,由类、属性等信息计算而来
开发环境:IEDA
找到File下的Settings,如图:
选中这两个框并应用
如何使用?
- 将鼠标放到类名上,会有提示,如图:
- 选中类名,按Alt+Enter,如图: