静态long类型常量serialVersionUID的作用
2016-04-21 16:45
295 查看
需要序列化的类需要实现Serializable接口,该接口没有任何方法,只是标示该类对象可被序列化。
序列化过程:使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态)
反序列化过程:使用一个输入流(如:FileInputStream)来构造一个ObjectInputStream(对象流)对象,接着,使用ObjectInputStream对象的readObject(Object obj)方法就可以将参数为obj的对象读出(即获取其状态)
如果没有设置这个值,你在序列化一个对象之后,改动了该类的字段或者方法名之类的,那如果你再反序列化想取出之前的那个对象时就可能会抛出异常,因为你改动了类中间的信息,serialVersionUID是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,当修改后的类去反序列化的时候发现该类的serialVersionUID值和之前保存在问价中的serialVersionUID值不一致,所以就会抛出异常。
而显示的设置serialVersionUID值就可以保证版本的兼容性,如果你在类中写上了这个值,就算类变动了,它反序列化的时候也能和文件中的原值匹配上。而新增的值则会设置成null,删除的值则不会显示。
序列化过程:使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态)
反序列化过程:使用一个输入流(如:FileInputStream)来构造一个ObjectInputStream(对象流)对象,接着,使用ObjectInputStream对象的readObject(Object obj)方法就可以将参数为obj的对象读出(即获取其状态)
如果没有设置这个值,你在序列化一个对象之后,改动了该类的字段或者方法名之类的,那如果你再反序列化想取出之前的那个对象时就可能会抛出异常,因为你改动了类中间的信息,serialVersionUID是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段,当修改后的类去反序列化的时候发现该类的serialVersionUID值和之前保存在问价中的serialVersionUID值不一致,所以就会抛出异常。
而显示的设置serialVersionUID值就可以保证版本的兼容性,如果你在类中写上了这个值,就算类变动了,它反序列化的时候也能和文件中的原值匹配上。而新增的值则会设置成null,删除的值则不会显示。
相关文章推荐
- ZOJ 1649 Rescue
- UITableView 基础篇
- easyui 动态添加Trees 和 Tabs
- Asyncdisplaykit
- json数据中的某一个字段进行快速排序quicksort
- STL之queue(队列)
- Dynamic Web Module 3.0 requires Java 1.6 or newer
- 基于MVC4+EasyUI的Web开发框架形成之旅--总体介绍
- lightoj 1048 - Conquering Keokradong 【二分 + 贪心】
- key-value数据库优点
- hdoj 5667 Sequence 【矩阵快速幂 + 费马小定理】
- 2016.4. 半期 最小表示法 sequence
- 显卡机器默认情况下是两个显卡自由切换,这导致FlyCaptue安装屡次失败。
- hibernate里createSQLQuery
- UEditor使用
- Html解析类的新选择CsQuery
- 一个自己做的easyui datagird扩展
- 本地化下按首字母分组排序的神器——UILocalizedIndexedCollation
- 简约至上-交互设计策略-总结语
- Elasticsearch的DSL之query and filter