当前位置: 首页 > 面试题库 >

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

嵇永望
2023-03-14
问题内容

几个月前,我将java.io.Serializable对象序列化为文件。现在,我需要阅读内容,但是从那以后,serialVersionUID发生了变化,现在我遇到了“类不兼容”错误。我知道一个事实,即没有任何数据成员已更改,因此唯一的障碍是serialVersionUID检查。

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

澄清说明

这个问题是假设我无法编辑源代码。有什么方法可以破解.class文件,也可以破解序列化的目标文件(使用十六进制编辑器,并在某个特定偏移量处更改值)?


问题答案:

作为一种技巧,您可以使用serialver工具生成jvm可能使用的serialVer:

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

如果您随后在类中手动设置了serialVerUID,则应该进行匹配,并且应该能够加载,前提是您没有以无效的方式更改类。



 类似资料:
  • 我在我的Android应用程序中使用了外部API。问题是在响应中,我不知道如何反序列化返回对象列表。我得到的JSON有这样的格式: 改装中的API调用如下所示: 我想忽略属性,并从该响应中检索。我知道我可以创建一个自定义的反序列化器,像这里这样忽略JSON中的一些字段,并像这里这样将成员转换为数组,但是在第二个链接中,我需要一个包装器类来形成我所期望的我的。有没有可能在我的列表/数组周围没有包装器

  • 我正在试验Stanford CoreNLP库,我想序列化主要的StanfordCoreNLP管道对象,尽管它抛出了一个java.io.NotSerializableException。 完整故事:每当我运行我的实现时,将管道注释器和分类器加载到内存中大约需要15秒。最终进程的内存约为600MB(很容易小到可以存储在我的机箱中)。我想在第一次创建管道后保存它,这样我就可以在以后将其读入内存。 然而,

  • 问题内容: 我必须报价, 1.将帐户保存到二进制(序列化)文件中。2.从二进制(序列化)文件加载(重新创建)帐户。 因此,首先,我正在查找确切的例子,而我却迷失了自己,在同样的情况下,人们提到xml,在我的脑海中,我认为它的意思像01010011000(二进制),而当我查看其他代码时,它看起来就像是正常的文本文件保存。 他到底是什么意思,有人可以举一个例子,或者给我一个更好地阐明这一点的网站吗?一

  • 我需要创建一个客户列表,每个客户都有一个工作列表。当将一个列表分配给一个客户机时,它是通过引用传递的,对列表的任何更改(例如清除列表)也会反映在客户机对象中。 我该如何避免这种情况?

  • 本文向大家介绍java对象的序列化和反序列化,包括了java对象的序列化和反序列化的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java对象的序列化和反序列化,供大家参考,具体内容如下 1. 什么是序列化        将对象转换为字节流保存起来,比如保存到文件里,并在以后还原这个对象,这种机制叫做对象序列化。(补充一句:把对象保存到永久存储设备上称为持久化) 2. 怎么实现序列化

  • 错误: java.lang.ClassNotFoundException:testprocedure.tp$3在java.net.URLClassLoader$1上运行(未知源)在java.net.URLClassLoader上运行(未知源)在java.security.accessController.doprivileged(本机方法)在java.net.URLClassLoader.find