Java序列化问题

标签 java class serialization

我想将我的问题更改为以下内容:

我有一个 HashMap 对象和一个 int。我想将其序列化到同一个文件中然后返回。我知道我应该按照与序列化相同的顺序进行反序列化。

请向我提供执行该操作的代码。

最佳答案

我根据您提供的信息做出假设,您遇到的序列化问题是由于原始序列化类与具有新字段的更新类之间的不兼容性。

如果您之前序列化了一个类,但未指定private static long serialVersionUID,则添加新字段将在尝试读回文件时导致 InvalidClassException。

请注意,在序列化先前版本之后,仅添加serialVersionUID不会产生兼容的类。您需要做的是重新生成原始的serialVersionUID,获取该数字并将其应用到您的类中。

您必须采取的步骤:

  1. (暂时)删除新的 int 并编译
  2. 通过运行serialVer生成原始serialVersionUID反对编译的 类
  3. 获取结果编号并将其分配给您要应用于更新类的private static long serialVersionUID
  4. 重新添加新的整数。

完成这些步骤后,您应该可以反序列化原始文件。

推荐阅读:why should I bother about serialVersionUID (sic)

关于Java序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1438733/

相关文章:

java - JNI 中 unsigned char 指针的等价物是什么?

Java(初学者): Cannot find symbol in Math class

c# - WCF 类型问题?

python - 将数据类数组序列化为 JSON

java - 在 Mockito 中使用自定义 Answer 类的 @mock 注释

java - 与eclipse不同的网站目录结构

javascript - 在 for 循环中创建对象的实例

python - 做self.something = something的目的是什么

PHP:将序列化的blob拉入数组然后显示

java - 如何使用 Google Guava 为每个新 map 条目设置不同的过期超时时间?