Я пытаюсь понять следующее утверждение из документации:
Если конкретный класс объекта неизвестен и объект может быть нулевым :
kryo.writeClassAndObject (output, object);
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, это не так.
Исключение в потоке "main" com.esotericsoftware.kryo.KryoException: невозможно создать класс (отсутствует конструктор без аргументов): com.romix.scala.serialization.kryo.ScalaProductSerializer
Я просто не понимаю, почему.
ранее, используя тот же код, вместо того, чтобы использовать мой класс RawData, я использовал карту, и она работала как шарм с writeObject и ReadObject.Поэтому я в замешательстве.
Может кто-нибудь помочь понять это?