Java中更改类名的奇怪错误

时间:2014-12-23 14:04:32

标签: java jira jira-plugin kryo

我正在使用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)...

1 个答案:

答案 0 :(得分: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。

HOWEVER 备份您要修改的所有数据。应始终以能够恢复原始数据的安全性来更改序列化数据。