0

SimpleDirectedGraph をシリアライズしようとすると、次のエラーが発生します。

com.esotericsoftware.kryo.KryoException: java.lang.IllegalArgumentException: Unable to create serializer "com.esotericsoftware.kryo.serializers.FieldSerializer" for class: org.jgrapht.graph.SimpleDirectedGraph

このタイプのエラーに関するインターネット検索では、ASM 4.0 ライブラリへのユーザー アップデートを推奨する多くの人が返されます。ASM 4.0 ライブラリを含む Kryo 2.2 All を使用しています。念のため、ASM 4 ライブラリを単独で含めてみましたが、うまくいきませんでした。

ArrayList などの単純なオブジェクトをシリアル化してみました。それらはうまくいきます。kryo がこのグラフ クラスのシリアル化に失敗する理由がよくわかりません。誰にもアイデアはありますか?

更新: 私はグラフを扱っているので、kryo の実験的な「継続」ブランチを実装してみましたhttps://github.com/EsotericSoftware/kryo/issues/103

残念ながら、私はまだ同じエラーを受け取ります。

更新:トリックは、別の種類のシリアライザーを使用している可能性があると思います。残念ながら、SimpleDirectedGraph で動作するものを見つけることができないようです。BeanSerializer は、最初のオブジェクト レイヤーのみをシリアル化します。ネストされたオブジェクトはシリアル化されないようです。他のシリアライザーは、FieldSerializer と同じエラーをスローします。人々が通常グラフで使用するシリアライザーはありますか?

4

1 に答える 1

0

これに対する私の解決策は理想的ではありません。うまくいけば、他の誰かがより良いものを投稿できます。私がこれを乗り越えた方法は、SimpleDirectedGraph オブジェクトだけに Java シリアライゼーションを指定することでした。

    kryo.addDefaultSerializer(SimpleDirectedGraph.class, JavaSerializer.class);

このソリューションでは、私の場合、オブジェクトの構造の大部分ではないクラスに非効率的な Java シリアル化を適用するだけなので、他のクラスに Kryo シリアライザーを引き続き使用できます。

理想的な解決策は、SimpleDirectedGraph で動作する Kryo シリアライザーを使用することです。私はそれを見つけることができませんでした。

于 2014-01-18T05:03:00.020 に答える