分类: 【Java 基础】2014-10-31 21:13 480人阅读 评论(0) 收藏 举报
 

目录(?)[+]

 
 
 
 
 

内容简介

 

某些实现了serializable接口的java类中会看到名称为serialVersionUID的静态字段,本文从根本上解释这个字段的含义。

知识铺垫

 

在java中,类的序列化和反序列化是由jvm实现,当然,不同的jvm可能有不同的实现方式,本文讨论java官方的jvm版本。

一个类,实现serializable接口之后,就代表开发者允许此类可以被序列化和反序列化,jvm就获得了序列化和反序列化此类的授权。如果没有实现serializable,而直接进行类的序列化操作,jvm会报出异常。

Serializable是一个标识接口,没有任何待实现的方法。

概念

 

Java序列化机制使用名称为serialVersionUID的long型字段来标志类的版本。序列化对象时,Jvm会把serialVersionUID的值写到类的序列化数据中;反序列化时,JVM会把对象数据数据中的serialVersionUID与本地相应类的serialVersionUID进行比较,如果值不相同(意味着类的版本不同),那么报异常InvalidCastException,即:类版本不对应,不能进行反序列化。如果类版本相同,则可以进行反序列化。

 

常见的serialVersionUID的值有两种情况:

一种是固定的一个long型值,比如:

private static final  long  serialVersionUID = 1L;

private static final  long  serialVersionUID = 123L;

第二种是根据类名、接口名、成员方法及属性等生成一个64位的哈希值(ide可以完成此工作),比如:

private static final  long  serialVersionUID = xxxxL;

当实现java.io.Serializable接口的类没有显式地定义一个serialVersionUID值时,Java序列化机制会根据编译的Class生成一个serialVersionUID作序列化版本比较用,一旦class文件有所变动(比如空格、变量名),那么serialVersionUID也会随之变动。

序列化数据和类版本相同但结构不同

 

当一个类和它的序列化数据的版本相同(即serialVersionUID值相同),但类结构不同时,反序列化过程遵循以下规则。---下边内容摘抄处也没有下边内容

最新文章

  1. SQL Server启动的几种方法
  2. 12 抽象函数-abstract
  3. NYOJ题目770仿射密码
  4. 二叉排序树(BST)的建立
  5. 菜鸟学自动化测试(八)----selenium 2.0环境搭建(基于maven)
  6. 转Masonry遇到的问题
  7. 11.2 morning
  8. 积累的VC编程小技巧之属性页
  9. nginx集群tomcat
  10. (转)CentOS无损调整磁盘分区大小的实现方法
  11. servlet 返回json 数据
  12. Linux下zeromq.js安装
  13. TypeScript笔记 1--环境搭建
  14. CSS3常用
  15. Python_匿名函数
  16. java定时器实现总结
  17. 【转载】 强化学习(七)时序差分离线控制算法Q-Learning
  18. mysqldump具体应用实例
  19. jmeter测试TCP服务器/模拟发送TCP请求
  20. Eclipse Git 克隆项目的时候出现Internal error; consult Eclipse error log

热门文章

  1. Journal of Proteome Research | Clinically Applicable Deep Learning Algorithm Using Quantitative Proteomic Data (分享人:翁海玉)
  2. snmap弱口令攻击利用
  3. kali的安装详解--摘自官方
  4. nginx 自动化定时切割日志
  5. [dfs] HDU 2019 Multi-University Training Contest 10 - Block Breaker
  6. [模板] trie树 (字典树)
  7. 算法训练 瓷砖铺放 【递归】java
  8. TCP、UDP服务器模型 在网络程序里面,通常都是一
  9. CSS3动画的使用以及优化
  10. SpringCloud服务的注册发现--------consul实现服务与发现