A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

hllang

初级黑马

  • 黑马币:0

  • 帖子:4

  • 精华:0

© hllang 初级黑马   /  2013-10-12 11:02  /  1427 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果我想序列化一个A类的对象,那么序列化成功后,我改变A类内容,反序列化提示不成功,这是为什么呢?原理是什么呢?

评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
是这样的,类A在编译的时候,JVM都分配给它一个id号码如 versionId = 12l,我们创建一个对象A a = new("李四",23);我们将a序列化到一个文件中,并且在这个文件中记录下versionId,如果A类未做任何改变,我们在反序列化的时候就可以成功匹配这个versionId,反序列化就能成功。如果A类改变了,那么新生成一个versionId,文件中存储的versionId无法与A的versionId匹配,序列化就会失败。

评分

参与人数 1技术分 +1 收起 理由
To + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
bird_not_fat 发表于 2013-10-12 11:04
是这样的,类A在编译的时候,JVM都分配给它一个id号码如 versionId = 12l,我们创建一个对象A a = new("李 ...

可是我把那个类该回去了,又能反序列化成功了,这样ID不是还是不匹配吗?
回复 使用道具 举报
hllang 发表于 2013-10-12 11:22
可是我把那个类该回去了,又能反序列化成功了,这样ID不是还是不匹配吗? ...

这个versionId是根据类的成员算出来的,不是随机分配的,所以将类改回去仍然能反序列化成功^^
回复 使用道具 举报
这个versionId是根据类的成员算出来的,不是随机分配的,所以将类改回去仍然能反序列化成功^^
回复 使用道具 举报
To 金牌黑马 2013-10-12 11:26:19
地板
楼主你好,如果问题已解决请将帖子状态改为提问结束,如果未解决请继续提问,谢谢合作。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马