【问题标题】:Deserialize binary Thrift message in Scala在 Scala 中反序列化二进制 Thrift 消息
【发布时间】:2016-09-16 06:06:56
【问题描述】:

我正在尝试反序列化 Scala 中的二进制消息:

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

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

【问题讨论】:

    标签: scala binary thrift scrooge


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • 谢谢!我还不能测试,我无法生成测试数据 b/c 我也不能序列化(同样的原因)。您能否向我简要解释一下这两种方法之间的区别以及 Serializer、TBase 和用 scrooge 生成的类/特征之间的上下文?
    【解决方案2】:
    def getClientError(binaryData: Array[Byte]) : ClientError = {
             val tdser = new TDeserializer();  
             val cliErr = new ClientError()
             tdser.deserialize(cliErr, binaryData)
             return cliErr 
    }
    

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 2014-01-04
      • 1970-01-01
      • 2019-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-03
      • 2016-09-15
      相关资源
      最近更新 更多