Обработка классов кейсов в twitter chill (интерфейс Scala для Kryo)?

Twitter-chill выглядит как хорошее решение проблемы эффективной сериализации в Scala без излишнего шаблонного кода.

Однако я не вижу никаких доказательств того, как они обрабатывают классы case. Это просто работает автоматически или что-то нужно сделать (например, создать конструктор с нулевым аргументом)?

У меня есть некоторый опыт работы с механизмом сериализации WireFormat, встроенным в Scoobi, который представляет собой оболочку Scala Hadoop, похожую на Scalding. У них есть сериализаторы для классов case до 22 аргументов, которые используют методы apply и unapply и выполняют сопоставление типов аргументов этих функций для извлечения типов. (Это может не понадобиться в Kryo/chill.)


person Urban Vagabond    schedule 31.12.2013    source источник


Ответы (1)


Как правило, они просто работают (пока элементы-компоненты также сериализуются Kryo):

case class Foo(id: Int, name: String)

// setup
val instantiator = new ScalaKryoInstantiator
instantiator.setRegistrationRequired(false)
val kryo = instantiator.newKryo()

// write
val data = Foo(1,"bob")
val buffer = new Array[Byte](4096]
val output = new Output(buffer)
kryo.writeObject(output, data)

// read
val input = new Input(buffer)
val data2 = kryo.readObject(input,classOf[Foo]).asInstanceOf[Foo]
person Arne Claassen    schedule 17.04.2015