在Scala中反序列化二进制Thrift消息

时间:2016-05-19 11:30:17

标签: scala binary thrift scrooge

我正在尝试在Scala中对二进制消息进行去序列化:

val deserializer = new TDeserializer(new TBinaryProtocol.Factory());
    try {
      val obj = deserializer.deserialize(new ClientError{}, input._2.toArray)

其中ClientError是从Thrift文件使用Scrooge生成的特征。问题是,deserialize()需要TBase对象,但TBase是一个接口。我该怎么做呢?我是否必须创建一个实现两者的新类? 感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

试试这个:

def decode(bytes: Array[Byte]): ClientError = {
  val protocolFactory = new TBinaryProtocol.Factory
  val buffer = new TMemoryInputTransport(bytes)
  val proto = protocolFactory.getProtocol(buffer)
  ClientError.decode(proto)
}

答案 1 :(得分:0)

def getClientError(binaryData: Array[Byte]) : ClientError = {
         val tdser = new TDeserializer();  
         val cliErr = new ClientError()
         tdser.deserialize(cliErr, binaryData)
         return cliErr 
}