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:
阅读(1443) | 评论(0) | 转发(0) |