当前位置: 首页 > 知识库问答 >
问题:

反序列化对象,其类serialVersionUID在Java中已更改

晋骏喆
2023-03-14

有一个类user实现serializable,但在第一个版本中没有定义serialversionuid。在下一个版本中,我提供了最终的serialversionuid

现在的问题是,每当我试图反序列化之前存储的User对象时,都会出现错误:

静态最终长serialVersionUID=4061053075992556495L;但需要com.example.android.user:静态final long serialVersionUID=-1079331593441085712L;

FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
User object = (User) ois.readObject();
ois.close();

共有1个答案

斜瑞
2023-03-14

这就是java序列化的问题:当你搞砸了这样的事情时,你通常会永远崩溃。

但也许它就像EJP建议的那样简单(而且通常是正确的)。然后,您只需更改当前类,使其具有消息告诉您要使用的串行uid。

如果您在创建这些文件后对您的类版本所做的机会是兼容的,那么您可能能够以这种方式解决您的问题。

 类似资料:
  • 问题内容: 有没有办法确定序列化Java对象的生成? 问题是我序列化了一个对象而没有明确指定。现在,反序列化过程抱怨类不兼容。但是,我并没有以使其不兼容的方式更改类。因此,我假设在类中指定足够了,因为它存储在对象数据中。为此,我需要从序列化数据中读取。 问题答案: 您可以通过扩展ObjectInputStream来做到这一点: 我相信可以通过替换方法返回的描述符来读取所有序列化的数据,但是我还没有

  • 问题内容: 几个月前,我将java.io.Serializable对象序列化为文件。现在,我需要阅读内容,但是从那以后,serialVersionUID发生了变化,现在我遇到了“类不兼容”错误。我知道一个事实,即没有任何数据成员已更改,因此唯一的障碍是serialVersionUID检查。 有没有办法禁用检查或修改二进制文件中的serialVersionUID? 澄清说明 这个问题是假设我无法编辑

  • 问题内容: 我有一个Java类,该类存储在HttpSession对象中,该对象在集群环境中的服务器之间进行了序列化和传输。为了便于说明,我们将此类称为“人员”。 在改进代码的过程中,该类从“ com.acme.Person”移动到“ com.acme.entity.Person”。在内部,该类保持完全相同(相同的字段,相同的方法,相同的所有内容)。 问题是我们有两组服务器同时运行旧代码和新代码。具

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

  • 本文向大家介绍Java中对象序列化与反序列化详解,包括了Java中对象序列化与反序列化详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java中对象序列化与反序列化。分享给大家供大家参考。具体如下: 一、简介 对象序列化(Serializable)是指将对象转换为字节序列的过程,而反序列化则是根据字节序列恢复对象的过程。 序列化一般用于以下场景: 1.永久性保存对象,保存对象的字节序列