![](/img/trans.png)
[英]How to read serialized object with a method taking generic type by Scala/Kryo?
[英](Scala) Recognize the type a serialized object by Kryo which is sent through network using UDP
目前,我在识别使用UDP通过网络发送的接收序列化对象方面遇到问题。
我有一个称为MsgType的抽象类:
sealed abstract class MsgType
case class Msg(message : String) extends MsgType
case class End() extends MsgType
其中,Msg表示正常消息,而End表示客户端的终止请求。
================================================== =========================
在服务器端,我有一个函数调用isMessage来检测它是正常消息还是终止请求:
def isMessage(message: AnyRef): Boolean = {
message match{
case End => false
case Msg(message) => true
}
}
================================================== =========================这是使用Kryo接收客户端发送的消息的代码:
val inputString = kyro.readObject(input, classOf[MsgType]) println("incoming Message: " + isMessage(inputString))
但是,当我运行代码时,有一个名为:
Exception in thread "main" com.esotericsoftware.kryo.KryoException: Error
constructing instance of class: MsgType
我知道是因为MsgType是一个抽象类。
有人可以建议我一个更好的解决方案,以解决识别接收到的序列化对象类型的问题吗?
谢谢,最好的问候,长。
不幸的是,Kryo无法以这种方式工作。 在开始反序列化之前,它应该知道要反序列化的对象的类型。 这意味着您还需要将此信息保存在序列化数据中。 方便地,Kryo提供了writeClassAndObject
readClassAndObject
这一点的writeClassAndObject
和readClassAndObject
。
另外,我希望您还会遇到与案例类使用有关的另一个问题。 除非您提供了自定义反序列化器,否则Kryo将失败,因为您的Msg
案例类没有默认的构造函数(即,没有参数的构造函数)。 您可以考虑使用twitter chill -Kryo的Scala包装器。 看到在Twitter chill中的 alao 处理案例类(Scala与Kryo的接口)吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.