java序列化版本号

在写java程序的时候经常会看到类中会有一个序列化版本号:serialVersionUID。这个值有的类是1L,有的又是很长的数值,通常是这样声明的:

或者:

这是为什么呢?今天来总结下这个序列化版本号的作用。
先说说序列化,java的序列化指的是把java对象转化为字节序列(bytes)的过程,而反序列化就是把字节序列转化为java对象的过程。这个功能主要的作用是把java对象存储在磁盘上或者在网络上传输,如果没有这个功能你想要传输对象的话只能通过字符串拼接了。至于具体是怎么实现的查下api就知道,很简单,不再赘述了。正是因为有了反序列化机制,所以jvm需要判断需要转化的两个类是不是同一个类,于是就需要一个序列化版本号。如果在反序列化的时候两个类的serialVersionUID不一样则jvm会抛出InvalidCastException的异常;如果serialVersionUID一致则表明可以转换。
下面再来讨论下这个字段的值。
首先这[......]

继续阅读