首页 > 其他分享 >00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)

00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)

时间:2023-02-20 12:34:17浏览次数:45  
标签:00022.15 为流 Serializable 版本 序列化 ID serialVersionUID


序列化版本目录

文章目录

  • ​​序列化版本目录​​
  • ​​前言​​
  • ​​一、是什么?​​
  • ​​解决方式1;修改本地的serialVersionUID为流中的serialVersionUID​​
  • ​​解决方式二(推荐):在当初实现Serializable接口时,就固定一个serialVersionUID​​
  • ​​总结​​

序列化版本ID:serialVersionUID

前言

接上一篇

00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)_序列化

一、是什么?

接上一篇,我们把User类改一下

00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)_版本_02


改了User类

这个时候我们再去运行反序列化的代码(即读取obj.dat文件)会不会有问题?

00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)_版本_03


当对象已经输出到文件中后,又改变了类,出现了不兼容问题,类的版本更新过,两者对不上

版本ID

00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)_User_04

解决方式1;修改本地的serialVersionUID为流中的serialVersionUID

00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)_User_05


00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)_序列化_06


加完这个版本号再来运行就可以了

00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)_User_07

解决方式二(推荐):在当初实现Serializable接口时,就固定一个serialVersionUID

00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)_User_08


注意

00022.15 序列化与反序列化的概述二(序列化版本ID:serialVersionUID)_版本_09

这样就行了,你类怎么改都没有关系

总结

当对象已经输出到文件中后,修改了类,再次读取这个文件时,报InvalidClassException
报这个错的原因是:流中关于类的serialVersionUID与本地类的serialVersionUID对不上,就会报InvalidClassException错误,
如何解决?
(1)修改本地的serialVersionUID为流中的serialVersionUID
(2)(推荐)在当初实现Serializable接口时,就固定一个serialVersionUID,这样每次编译就不会自动生成一个新的serialVersionUID


标签:00022.15,为流,Serializable,版本,序列化,ID,serialVersionUID
From: https://blog.51cto.com/u_15800767/6068300

相关文章