Java中serialVersionUID的使用
2017-12-21 21:32
405 查看
场景:
在网络传输Java对象、将Java对象存储到文件、将Java对象以BLOB形式存储到数据库中时,需要对Java对象进行序列化及反序列化,标准模式是实现Serializable接口。 实现上述接口时,需要提供一个serial version ID,用于标识类的版本。一个对象被序列化后,只要其版本不变,都可以进行反序列化,一旦 改变造成版本不一致,会抛出InvalidClassException异常。作用:
序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。两种生成方式:
一个是默认的1L,比如:private static final long serialVersionUID = 1L;一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,比如:
private static final long serialVersionUID = xxxxL;
关于其定义,可参考JDK文档:https://docs.oracle.com/javase/9/docs/api/java/io/Serializable.html
使用:
在Eclipse中,也提供这样两种方式显示定义UID,一种是“add default serial version ID”,默认值为1L;另一种是“add generated serial version ID”,默认值是一个很大的数,是根据类的具体属性而生成,当类属性有变动时,该值会更改。我们只要保证在同一个类中,不同版本根据兼容需要,是否更改SerialVersionUid即可。
建议采用第一种自动生成方法,当对类进行了不兼容性修改时,需要修改UID。
采用第二种方法时,如果修改了属性,不重新生成UID时,默认值是不会变的,也可以正常反序列化,但不推荐,毕竟UID的值与实际不符。
对于继承关系,父类实现序列化接口,子类可以继承接口的实现,但需显示定义UID,因为父类UID类型为private static,不可被继承,同时子类作为单独的类需要单独的UID。
相关文章推荐
- Java对象序列化为什么要使用SerialversionUID
- java序列化和serialVersionUID的使用方法实例
- Java serialVersionUID的使用示例
- Java序列化之transient和serialVersionUID的使用
- 一些java类中为什么需要重载 serialVersionUID 属性
- java文件中为什么会有serialVersionUID
- serialVersionUID improves Java serialization performance
- java文件中为什么会有serialVersionUID
- Java中serialVersionUID的解释
- Java中serialVersionUID的解释
- Java中为什么实现了Serializable接口就具备了被序列化的能力以及serialVersionUID的作用
- java文件中为什么会有serialVersionUID
- java文件中为什么会有serialVersionUID
- Java中serialVersionUID的解释
- Java serialVersionUID
- java文件中为什么会有serialVersionUID
- Java类的serialVersionUID属性
- Java中serialVersionUID的解释
- Serializable兼容性问题及serialVersionUID的使用
- java文件中serialVersionUID 的用途