- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图从文档中理解以下声明:
如果对象的具体类未知且对象可能为空:
kryo.writeClassAndObject(output, object);
Object object = kryo.readClassAndObject(input);
如果不确切知 Prop 体类怎么办。
我有以下代码:
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,则不会。
Exception in thread "main" com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): com.romix.scala.serialization.kryo.ScalaProductSerializer
我只是不明白为什么。
早些时候使用相同的代码,而不是使用我的类 RawData,我使用了一个 Map,它与 writeObject 和 ReadObject 一起工作就像一个魅力。因此我很困惑。
谁能帮忙理解一下?
最佳答案
区别如下:
writeClassAndObject
和 readClassAndObject
:
Product
这样的特征,Class
对象)来构造这个对象(没有这个类型,它不知道什么 构建),ScalaProductSerializer
writeObject
和 readObject
:
EnumSetSerializer
),ScalaImmutableAbstractMapSerializer
)针对您的具体情况总结一下:
RawData
时:
ScalaProductSerializer
需要找出Product
的确切类型来创建实例,typ: Class[Product]
参数来完成它,readClassAndObject
有效。scala.collection.immutable.Map
导入为 IMap
)时:
ScalaImmutableAbstractMapSerializer
不需要找出确切的类型 - 它使用 IMap.empty
创建一个实例,typ: Class[IMap[_, _]]
参数,readObject
和 readClassAndObject
都有效。关于java - Kryo:readClassAndObject/ReadObject 和 WriteClassAndObject/WriteObject 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52337925/
我试图从文档中理解以下声明: 如果对象的具体类未知且对象可能为空: kryo.writeClassAndObject(output, object); Object object = kryo.rea
我是一名优秀的程序员,十分优秀!