Chinaunix首页 | 论坛 | 博客
  • 博客访问: 380423
  • 博文数量: 138
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1620
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-10 16:55
个人简介

当你比别人优秀一点点,别人会嫉妒你。当你比别人优秀很多,别人会羡慕你。

文章分类

全部博文(138)

文章存档

2016年(2)

2015年(2)

2014年(15)

2013年(119)

我的朋友

分类: Java

2014-12-11 16:17:27


serialVersionUID 

一个类的对象可以编程一个流式数据,然后
1,把这部分数据保存在硬盘上,等需要了再从硬盘上读取,把流式数据恢复为一个对象的形式
2,把这部分数据通过网络发送到远端,远端把流式数据恢复为一个对象的形式


一个类可能会变化,如果存在硬盘上后,类发生了变化,然后用新类就解析旧的数据流,就会出问题,解析不出来
同样,如果发送到远端,远端的类跟发送方的类,不是完全一样的,那么远端用自己的类去解密数据流,就会出问题。



那么就需要为这个类,维护一个版本号。
这个号,是per 类的,也就是类自己维护这就行,不跟其他类冲突,我们不会用B类去解析A类转换的数据流。
我们顶多用New B 或者Old B 去解析 B 转换的数据流,所以这个号是per 类的。

我们给类编一个号,当类有了大的更新的时候,也就是B 变为了New  B,我们为New B再编一个号,这样,如果我们企图用New B解密 B 构造的数据流,JVM 就会发现,编号不匹配,麻烦换他原来的B来解析。


就是这么简单。

还有一点就是,有时候,虽然类有了变化,但是新类仍然能解析旧类构建的数据流,那么我们可以保持那个号不变。这就叫兼容。


至于怎么编号,有这么几个情况:
    可以不编号,那么编译器会根据类的成员情况自动给你编一个,强烈建议别这样,因为这个变化受类结构以及编译器的类型影响太大,很容易把两个明明可以配对(构建,解析)的两个类,编号不同,这样就产生了不必要的错误。
    可以手动编号
    可以用tool编号:1)命令行2)IDE 比如eclips
    可以在code中编号:


相关link:





阅读(1400) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~