java 序列化的一些问题

来源:互联网 发布:php strlen 编辑:程序博客网 时间:2024/05/16 07:24

问题:

版本升级后,查阅日志记录,遇到以下问题

local class incompatible: stream classdesc serialVersionUID = 1, local class serialVersionUID = 2949490652656428605

依据已有的知识,断定是序列化的问题。通过查询SVN记录,对应的类果然果然有人把serialVersionUID给改了。


背景知识:

程序运行的过程中,会持久化bean对象,期间牵扯到序列化。

序列化,也就是把对象编码成字节流,反之,反序列化就是把字节流组装成对象。

简单的序列化就是继承Serializable接口,然后使用框架生成serialVersionUID


重温相关知识,以下内容摘自《Effective JAVA》第二版Joshua Bloch著

1.实现Serializable付出的最大的代价是,一旦这个类发布,就大大降低了“改变这个类的实现“的灵活性

--简单理解就是,类发布了,如果有serialVersionUID,则你这个值不能再变了;如果serialVersionUID没值,你的这个类就不能有结构上的变动了。

 因为系统会根据隐含的根据类名称,实现的接口名称,以及公有、包含的变量的字段,自动生成一个UID。


2.增加Bug和安全漏洞的可能性

--反序列化严格上来讲是一种构造方法,因此存在一定风险


3.增加了测试的负担


原创粉丝点击