黑马程序员技术交流社区

标题: 关于序列化 [打印本页]

作者: hllang    时间: 2013-10-12 11:02
标题: 关于序列化
如果我想序列化一个A类的对象,那么序列化成功后,我改变A类内容,反序列化提示不成功,这是为什么呢?原理是什么呢?
作者: bird_not_fat    时间: 2013-10-12 11:04
是这样的,类A在编译的时候,JVM都分配给它一个id号码如 versionId = 12l,我们创建一个对象A a = new("李四",23);我们将a序列化到一个文件中,并且在这个文件中记录下versionId,如果A类未做任何改变,我们在反序列化的时候就可以成功匹配这个versionId,反序列化就能成功。如果A类改变了,那么新生成一个versionId,文件中存储的versionId无法与A的versionId匹配,序列化就会失败。
作者: hllang    时间: 2013-10-12 11:22
bird_not_fat 发表于 2013-10-12 11:04
是这样的,类A在编译的时候,JVM都分配给它一个id号码如 versionId = 12l,我们创建一个对象A a = new("李 ...

可是我把那个类该回去了,又能反序列化成功了,这样ID不是还是不匹配吗?
作者: bird_not_fat    时间: 2013-10-12 11:24
hllang 发表于 2013-10-12 11:22
可是我把那个类该回去了,又能反序列化成功了,这样ID不是还是不匹配吗? ...

这个versionId是根据类的成员算出来的,不是随机分配的,所以将类改回去仍然能反序列化成功^^
作者: bird_not_fat    时间: 2013-10-12 11:24
这个versionId是根据类的成员算出来的,不是随机分配的,所以将类改回去仍然能反序列化成功^^
作者: To    时间: 2013-10-12 11:26
楼主你好,如果问题已解决请将帖子状态改为提问结束,如果未解决请继续提问,谢谢合作。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2