Java - 修改二进制序列化对象的serialVersionUID

标签 java serialization serialversionuid

几个月前,我将 java.io.Serialized 对象序列化到文件中。现在我需要读取内容,但从那时起,serialVersionUID 已更改,现在我收到“类不兼容”错误。我知道所有数据成员都没有改变,所以唯一的障碍是serialVersionUID 检查。

有没有办法禁用检查或修改二进制文件中的serialVersionUID?

澄清

这个问题假设我无法编辑源代码。有没有办法可以破解 .class 文件或者破解序列化对象文件(使用十六进制编辑器并更改某个偏移处的值)?

最佳答案

作为一种破解,您可以使用serialver工具生成您的jvm可能正在使用的serialVer:

serialver -classpath 无论 com.foo.bar.MyClass

如果您随后在类中手动设置serialVerUID,它应该匹配,并且您应该能够加载,假设您没有以无效的方式更改类。

关于Java - 修改二进制序列化对象的serialVersionUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/444909/

相关文章:

显示循环的Java代码

java - Arraylist求连续重复元素的个数

java - str.equals ("") 和 "".equals(str) 之间有什么区别?

Python2 : Should I use Pickle or cPickle?

java - 为什么反序列化时不使用用户定义的serialVersionUID?

java - 在 Spring 中排除单元测试 @Configurations 的最佳方法?

c - 数组是存储为指针还是完整存储在 C 结构中? (是 : How to dump structs to disk when some fields are pointers? )

serialization - Data.Vector.Binary 与 Binary [a] 实例重叠

java - 服务器和客户端类之间的串行版本 ID 不匹配问题

java - 抽象类是否应该有一个 serialVersionUID