几个月前,我将一个java.io.Serializable对象序列化为一个文件。现在我需要阅读这些内容,但自此之后,serialVersionUID发生了变化,现在我得到了“类不兼容”错误。我知道数据成员都没有改变,所以唯一的障碍是serialVersionUID检查。Java - 修改二进制序列化对象的serialVersionUID
有没有办法禁用检查或修改二进制文件中的serialVersionUID?
澄清
这个问题是假设我不能编辑源代码。有没有办法可以破解.class文件,或者破解序列化的目标文件(使用十六进制编辑器并在某个偏移量处更改值)?
只要您设置serialVersionUID,您就可以*以这种方式使用序列化。从Serializable文档 - “因此,为了保证在不同的java编译器实现中保持一致的serialVersionUID值,可序列化的类必须声明一个显式的serialVersionUID值。” – CurtainDog 2009-04-16 13:19:04
这可能是真实的,考虑到如果您更新课程,则无法访问并获取数据。你所要做的就是将数据加载到你的类的未更新版本中,并将它传递给新类并再次序列化(在运行时),这在大多数情况下不可行。 – mostruash 2013-02-22 13:49:06