У меня есть класс с полем scala.collection.mutable.LongMap
.Deserializing LongMap in Kryo
После сериализации с Kryo
Я пытаюсь десериализации объекта и получить следующее исключение:
com.esotericsoftware.kryo.KryoException: java.lang.IllegalArgumentException: Can not set final scala.collection.mutable.LongMap field com.name.of.field to scala.collection.mutable.HashMap
Serialization trace:
field (com.name.of)
at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:626) ~[com.esotericsoftware.kryo.kryo-2.21.jar:na]
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) ~[com.esotericsoftware.kryo.kryo-2.21.jar:na]
at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:648) ~[com.esotericsoftware.kryo.kryo-2.21.jar:na]
at com.esotericsoftware.kryo.serializers.FieldSerializer$ObjectField.read(FieldSerializer.java:605) ~[com.esotericsoftware.kryo.kryo-2.21.jar:na]
at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:221) ~[com.esotericsoftware.kryo.kryo-2.21.jar:na]
at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:729) ~[com.esotericsoftware.kryo.kryo-2.21.jar:na]
IIUC LongMap
сериализуется в HashMap
, а затем десериализации терпит неудачу как HashMap
не могут быть записаны в LongMap
поле.
Я вручную запустил что-то вроде https://github.com/romix/akka-kryo-serialization/blob/master/src/test/scala/com/romix/scala/serialization/kryo/MapSerializerTest.scala#L78 и подтвердил, что сериализованный LongMap
десериализуется в HashMap
.
Любая идея, как правильно читать/записывать этот объект, так что LongMap
будет считаться LongMap
вместо HashMap
?
Нужно ли использовать прокси-класс? написать собственный сериализатор/десериализатор? В качестве альтернативы, есть ли приличная библиотека сериализации, которая правильно обрабатывает LongMap
?
P.S. Я бы пометил вопрос LongMap
, но у меня недостаточно репутации для создания новых тегов.
показать свое определение класса ... –