0

我正在使用 kryo lib 序列化对象。我得到错误:

Unable to find class: java.util.ArrayLisoSerialization

并且队友重现了该错误...似乎来自 Kryo 的 java 类名称已更改(ArrayListSerialization -> ArrayLisoSerialization)。这是在 2 台计算机(linux 和 windows,都是 jdk7)上测试过的,问题只出现在我的计算机(linux)上。我试图将 Java 版本从 jdk7 (build 67) 更改为 jdk8,但问题仍然出现。

任何想法为什么会发生?

错误跟踪的较大部分:

com.esotericsoftware.kryo.KryoException: Unable to find class: java.util.ArrayLisoSerialization trace:messages  at com.esotericsoftware.kryo.util.DefaultClassResolver.readName(DefaultClassResolver.java:138)  at com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:115) at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:666)  at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:99)  at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:528) at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:682)...
4

1 回答 1

0

这看起来像是 kryo 中某处或项目配置文件中的错字。我会先对您的项目文件进行字符串搜索。

乍一看,这是错误的:

String className = input.readString();
....
type = Class.forName(className, false, kryo.getClassLoader());

问题在于它看到的数据。您的序列化内容包含您提到的错误类,如 className。

我不知道这是怎么写成这样的,因为我假设 java.util.ArrayListSerialization 最初是写的,但不知何故被破坏了。

不过,我对 Kryo 不太熟悉。这是写入人类可读的文本文件吗?如果是这样,这可能是手动读取文件时的意外替换。(使用 vi、记事本或其他东西)。从我所见,输入流被简单地读取,并打开了一个字符串。

我会打开数据文件并查看字符串 java.util.ArrayLisoSerialization 是否存在。我认为这应该更改为 java.util.ArrayListSerialization。

但是,请备份您正在修改的任何数据。更改序列化数据应始终确保能够恢复到原始数据的安全性。

于 2014-12-23T14:18:47.220 回答