繁体   English   中英

通过Twitter chill-scala向Kryo注册课程

[英]Registering a class with Kryo via twitter chill-scala

我正在尝试通过Twitter的chill-scala库使用Kryo序列化Scala类的实例。 它来自库(外部jar),因此,我认为需要在Kryo中注册。

如何使用chill-scala注册一个类以进行(反)序列化?

这是我代码的核心,主要是基于检查chill-scala测试套件。

// This is from the chill-scala test suite
def serialize[T](t: T): Array[Byte] = ScalaKryoInstantiator.defaultPool.toBytesWithClass(t)
def deserialize[T](bytes: Array[Byte]): T =
  ScalaKryoInstantiator.defaultPool.fromBytes(bytes).asInstanceOf[T]


/**
 * Save a value in cache.
 */
def save[T](key: String, value: T, expiration: Int = 0): Future[T] = {
  cache.put(key, serialize[T](value), expiration, TimeUnit.SECONDS)
  Future.successful(value)
}

/**
 * Finds a value in the cache.
 */
def find[T: ClassTag](key: String): Future[Option[T]] = Future {
  val result = deserialize[T](cache.get(key).asInstanceOf[Array[Byte]])
  Option(result)
}

当我运行它时,它会抛出

com.esotericsoftware.kryo.KryoException: Unable to find class: <name_of_external_class>

更一般而言,是否存在有关如何使用chill-scala的文档? 该软件包的作者显然已经做了很多工作,我已经看到了很多关于它的积极参考-但没有文档。

感谢您的指导,

拜伦

我认为chill只是Kryo的扩展,它比Kryo默认的FieldSerializer更好地为受支持的scala类提供了序列化器。

因此,如果您不知道如何使用chill,则应尝试阅读Kryo的文档

而且,除了

Unable to find class: <name_of_external_class>

可能是因为该课程不在您的课程路径中。 它可能与Kryo无关。

请注意,即使未在Kryo中注册,该类仍可以由Kryo序列化。

如果您需要使用chill的良好示例,那么Apache Spark的源代码是一个不错的选择。 同样, 这个仓库中的小例子是可以接受的。

暂无
暂无

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

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