`
wlvfox
  • 浏览: 26066 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

serialVersionUID的作用

XML 
阅读更多
java在序列化的时候涉及到很多检查,serialVersionUID就是其中一个。

那这个serialVersionUID有什么用处?

这个值可以由类指定,也可以不指定。如果不指定的话java会根据class计算serialVersionUID,相当于hash的原理(但不是hash不要混淆),只要类没有变化,计算出来的serialVersionUID也会变化。

它用在反序列化的时候“检查”当前的类是不是已经被修改过。如果发现serialVersionUID对不上号,那么会抛出 java.io.InvalidClassException的异常,这种情况发生在由于种种因素修改了序列化对象的类文件时。

但是有时候我们有这样的需求,将A类对象序列化之后,版本升级,修改了A类,这时候,希望反序列化的时候还能认识之前版本的序列化对象。这时候serialVersionUID就在笑了,对,只要指定序列化对象类的serialVersionUID就可以了。

指定了序列化对象的serialVersionUID,即使你删除了类的某个成员变量,其他未修改信息仍然能正确解析,对他就是这么变态。

ps: 介绍下我的使用场景:我需要持久一些动态的配置,在每次修改之后,我都会将新的配置持久化到文件中。但是不想使用xml文件,虽然易懂,但是对我系统来说没有必要,我这个配置我是提供用户在页面上直接配置的,不需要打开XML文件来写(容易出错,还需要重启应用)。我现在的做法就是就配置文件写成一个类,配置项就是类中的成员变量,这样新加配置文件直接内存中分配一个配置对象,然后将次对象序列化到文件中,但是考虑到配置项可能会增加,但是我需要在配置类新加了配置项之后,之前的数据文件仍然能读取,于是就有了上面的尝试。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics