私はscala.collection.mutable.LongMap
タイプのクラスを持っています。KryoでLongMapを逆シリアル化する
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
がHashMap
の代わりにLongMap
と読み込まれるように、このオブジェクトを正しく読み書きする方法はありますか?
プロキシクラスを使用する必要がありますか?カスタムシリアライザ/デシリアライザを作成しますか? また、LongMap
を適切に処理する適切なシリアライゼーションライブラリがありますか?
P.S.私はLongMap
と質問をタグ付けしたが、私は新しいタグを作成するための十分な評判を持っていない。
あなたのクラス定義を表示... –