JAVA serialVersionUID作用

来源:互联网 发布:免费人事工资软件 编辑:程序博客网 时间:2024/06/06 10:55

在做项目时,有时可能会使用类来传输信息。通过将这个类序列话便可以实现,很简单。但是假如发送方和接收方这个类放在不同包中,或者发送方和接收方类里面内容稍微有一点不同,那么JVM就会抛出InvalidClassException的异常。什么原因呢?

JVM抛出INvalidClassException是为了保证在把传输过来的类的数据流转换成类实例的时候,转换成的类和原来类是一样。比如如果传过来一只猫,接收方却把它转换成一只狗,那么肯定会出问题,这也是我们开发所不希望的。但是有时候,可能我们只是对类做了一些稍微的改动,以方便我们程序的开发,或者我们在包管理更方便,这时我们希望转换过程在忽略掉这些区别。这时我们该怎么做?

在给类序列化的时候eclipse会画一条黄线让定义一个serialVersionUID,每次都没注意这个警告,反正做的时候抛出INvalidClassExcption的时候就把发送方和接收方的类修改的一样,放到相同的包里面就可以解决了。没有把这两者联系起来。在序列化的类里面,编译器会自动计算这个类的serialVersionUID的值,这个值跟这个类所在包名,类名,继承关系,非私有的属性和方法,等诸多因素来确定。JVM在判断类是否相同时就是通过比较serialVersionUID来确定的。这样,如果发送方和接收方中用于通信的类放在不同包里面,或者类的内容不一样,那么计算出来的serialVersionUID肯定不一样。转换就不会成功。为了达到让JVM忽略一些区别,我们可以在编程的时候显式给出serialVersionUID的值。


这时我们可以自己显示定义一个serialVersionUID

private static final serialVersionUID = 123455677L

后面赋值自己取。然后在两边的类里面都加上着一条,当两边的serialVersionUID一样时,JVM就会认为两个类实一样的,然后就会将数据流转换成本地的类实例。

0 0
原创粉丝点击