您的位置:首页 > 产品设计 > UI/UE

Java中serialVersionUID的作用

2012-01-20 14:42 316 查看
java在序列化的时候涉及到很多检查,serialVersionUID就是其中一个。

那这个serialVersionUID有什么用处?

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

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

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

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

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

原帖地址:http://xuehuilu.blog.163.com/blog/static/114532348200975104337798/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: