关于Java Serial Version UID的一些说明
来源:互联网 发布:c语言编程界面 编辑:程序博客网 时间:2024/04/27 11:22
在网络传输Java对象、将Java对象存储到文件、将Java对象以BLOB形式存储到数据库中时,需要对Java对象进行序列化及反序列化,标准模式是实现Serializable接口。
实现上述接口时,需要提供一个Serial Version UID,该UID用于标识类的版本。一个对象被序列化后,只要其版本不变,都可以进行反序列化,一旦
改变造成版本不一致,会抛出InvalidClassException异常。
建议显示定义UID,如果不显示定义,JVM会自动产生一个值,这个值和编译器的实现有关,不稳定,可能在不同JVM环境下出现反序列化抛出InvalidClassException异常的情况。
在Eclipse中,提供两种方式显示定义UID,一种是“add default serial version ID”,默认值为1L;另一种是“add generated serial version ID”,默认值是一个很大的数,是根据
类的具体属性而生成,当类属性有变动时,该值会更改。
建议采用第一种自动生成方法,当对类进行了不兼容性修改时,需要修改UID。
采用第二种方法时,如果修改了属性,不重新生成UID时,默认值是不会变的,也可以正常反序列化,但不推荐,毕竟UID的值与实际不符。
对类进行兼容性和不兼容性修改的情况请参见以下url:http://docs.oracle.com/javase/7/docs/platform/serialization/spec/version.html。
Hibernate的pojo类建议也采用上述方法,便于扩展。
对于继承关系,父类实现序列化接口,子类可以继承接口的实现,但需显示定义UID,因为父类UID类型为private static,不可被继承,同时子类作为单独的类需要单独的UID。
实现上述接口时,需要提供一个Serial Version UID,该UID用于标识类的版本。一个对象被序列化后,只要其版本不变,都可以进行反序列化,一旦
改变造成版本不一致,会抛出InvalidClassException异常。
建议显示定义UID,如果不显示定义,JVM会自动产生一个值,这个值和编译器的实现有关,不稳定,可能在不同JVM环境下出现反序列化抛出InvalidClassException异常的情况。
在Eclipse中,提供两种方式显示定义UID,一种是“add default serial version ID”,默认值为1L;另一种是“add generated serial version ID”,默认值是一个很大的数,是根据
类的具体属性而生成,当类属性有变动时,该值会更改。
建议采用第一种自动生成方法,当对类进行了不兼容性修改时,需要修改UID。
采用第二种方法时,如果修改了属性,不重新生成UID时,默认值是不会变的,也可以正常反序列化,但不推荐,毕竟UID的值与实际不符。
对类进行兼容性和不兼容性修改的情况请参见以下url:http://docs.oracle.com/javase/7/docs/platform/serialization/spec/version.html。
Hibernate的pojo类建议也采用上述方法,便于扩展。
对于继承关系,父类实现序列化接口,子类可以继承接口的实现,但需显示定义UID,因为父类UID类型为private static,不可被继承,同时子类作为单独的类需要单独的UID。
1 0
- 关于Java Serial Version UID的一些说明
- JAVA Serializable 类中的Serial Version ID
- JAVA Serializable 类中的Serial Version ID
- JAVA Serializable类中的Serial Version ID
- JAVA Serializable 类中的Serial Version ID
- 关于日本的UID
- 关于java中switch使用的一些说明
- (转)关于java内省机制的一些描述与说明
- 关于smarty3的一些说明
- 关于smarty3的一些说明
- 关于WirelessKey的一些说明
- 关于Mplayer的一些说明
- 关于宏的一些说明
- 关于adaboost的一些说明
- 关于就业的一些说明
- 关于adaboost的一些说明
- 关于ARC的一些说明
- 关于RotateRect的一些说明
- VS2010/MFC编程入门之二十六(常用控件:滚动条控件Scroll Bar)
- WPF 的 BackgroundWorker
- 学习心得-------计算机网络基础(1)
- CV_CAST_8U(val);的意义!
- AFNetworking 返回错误unsupported media type (415) 解决方案
- 关于Java Serial Version UID的一些说明
- 决策树分类算法之ID3
- 多进程并发编程----基于高级的动态创建进程池的模型
- 会用到的android 开发 第三方
- Python中OS模块
- iOS @synthesize和@dynamic
- 专题二 第七道题和第八道题
- 02-线性结构2 Reversing Linked List
- 一位相乘