我正在使用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)...
答案 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 备份您要修改的所有数据。应始终以能够恢复原始数据的安全性来更改序列化数据。