0

尝试序列化 SimpleDirectedGraph 时出现以下错误:

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

我对此类错误的 Internet 搜索返回了很多人建议将用户更新到 ASM 4.0 库。我正在使用 Kryo 2.2 All,其中包括 ASM 4.0 库。为了以防万一,我还尝试单独包含 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);

这个解决方案让您仍然可以将 Kryo 序列化器用于其他类,因为它只将低效的 java 序列化应用于一个类,在我的例子中,它不是对象结构的主要部分。

理想的解决方案是使用与 SimpleDirectedGraph 一起使用的 Kryo 序列化程序。我找不到一个。

于 2014-01-18T05:03:00.020 回答