【发布时间】:2015-11-20 14:35:06
【问题描述】:
我一直在使用 Kryo 来序列化我的数据并将其保存在数据库中。后来我尝试再次获取序列化数据并尝试反序列化它。 尽管我序列化的大多数数据都能正确反序列化,但在某些情况下,我会得到以下异常 Trace for some data:
com.esotericsoftware.kryo.KryoException: Invalid ordinal for enum "test.swift.mt564.Code4Ec335Type": 29
Serialization trace:
dataMap (parser.container.TestDataCommon)
at com.esotericsoftware.kryo.serializers.DefaultSerializers$EnumSerializer.read(DefaultSerializers.java:331)
at com.esotericsoftware.kryo.serializers.DefaultSerializers$EnumSerializer.read(DefaultSerializers.java:305)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:767)
at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:139)
at com.esotericsoftware.kryo.serializers.MapSerializer.read(MapSerializer.java:17)
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:685)
at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:106)
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:482)
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:767)
at java.lang.Thread.run(Thread.java:745)
几个月前,这些数据被序列化并作为 BLOB 保存在数据库中。现在我发现需要检索这些数据并反序列化它。当我尝试将数据非理想化为所需对象时,会发生上述异常。
我知道在反序列化 Enum 时,Kryo 使用 Enum 的序数值。但由于某种原因,它的序数值非常高,为 30。我不确定究竟是什么导致了这个问题。
【问题讨论】:
标签: serialization enums kryo