繁体   English   中英

无法迭代使用kryo序列化的scala列表

[英]Unable to iterate over scala list serialized with kryo

我有一个Scala / Akka应用程序,它使用Kryo存储序列化消息,然后在将来运行时将它们重新引入系统。 但是,当我尝试对消息中的列表进行理解时,我从Scala获得异常。

java.util.NoSuchElementException: head of empty list
    at scala.collection.immutable.Nil$.head(List.scala:422)
    at scala.collection.immutable.Nil$.head(List.scala:419)
    at scala.collection.immutable.List.map(List.scala:278)
    ...

这可以通过使用Kryo序列化数据而不使用scala特定的序列化程序来实现。

问题是Scala每次启动JVM时都会创建单个对象,例如Nil ,然后使用标识对它们进行比较(因为它很快就会这样做)。 不幸的是,Kryo并不知道该对象本身就是一个单例,所以当你反序列化时,你会得到一个不同的Nil实例(当scala假设只有一个时)。

解决方案是确保Kryo将这些对象反序列化为当前运行的正确表示,这可以使用像chill这样的库(特别是chill-scala序列化器)来实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM