【发布时间】:2018-09-14 19:06:43
【问题描述】:
我试图从文档中理解以下声明:
如果对象的具体类未知且对象可能为空:
kryo.writeClassAndObject(输出, 对象);
Object object = kryo.readClassAndObject(input);
如果具体类不确切知道怎么办。
我有以下代码:
case class RawData(modelName: String,
sourceType: String,
deNormalizedVal: String,
normalVal: Map[String, String])
object KryoSpike extends App {
val kryo = new Kryo()
kryo.setRegistrationRequired(false)
kryo.addDefaultSerializer(classOf[scala.collection.Map[_,_]], classOf[ScalaImmutableAbstractMapSerializer])
kryo.addDefaultSerializer(classOf[scala.collection.generic.MapFactory[scala.collection.Map]], classOf[ScalaImmutableAbstractMapSerializer])
kryo.addDefaultSerializer(classOf[RawData], classOf[ScalaProductSerializer])
//val testin = Map("id" -> "objID", "field1" -> "field1Value")
val testin = RawData("model1", "Json", "", Map("field1" -> "value1", "field2" -> "value2") )
val outStream = new ByteArrayOutputStream()
val output = new Output(outStream, 20480)
kryo.writeClassAndObject(output, testin)
output.close()
val input = new Input(new ByteArrayInputStream(outStream.toByteArray), 4096)
val testout = kryo.readClassAndObject(input)
input.close()
println(testout.toString)
}
当我使用 readClassAndObject 和 writeClassAndObject 时有效。但是,如果我使用 writeObject 和 readObject 则不会。
线程“主”com.esotericsoftware.kryo.KryoException 中的异常: 无法创建类(缺少无参数构造函数): com.romix.scala.serialization.kryo.ScalaProductSerializer
我只是不明白为什么。
之前使用相同的代码,我没有使用我的 RawData 类,而是使用了 Map,它与 writeObject 和 ReadObject 一起工作就像一个魅力。因此我很困惑。
有人可以帮忙理解吗?
【问题讨论】: