如何创建TBase类实例

时间:2019-01-31 19:42:22

标签: java serialization deserialization thrift

我正在尝试从字节数组中反序列化Thrift对象。

在我发现的所有示例中,反序列化器都会修改为其提供的org.apache.thrift.TBase接口的实例。
如何创建TBase的实例?

TDeserializer deserializer = new TDeserializer(new TCompactProtocol.Factory());
byte[] data = ...// my serialized thrift object
TBase instance = ... // where to get this one ???

deserializer.deserialize((TBase) instance, data);

deserialize方法的代码:

public void deserialize(TBase base, byte[] bytes) throws TException {
    deserialize(base, bytes, 0, bytes.length);
}

1 个答案:

答案 0 :(得分:1)

你不知道。

相反,您要创建要反序列化的(最外部)对象的实例。

由于Thrift的工作方式,在RPC方案中,信息通常是隐式已知的,因此不进行序列化。 IOW,出于序列化的目的,您必须通过自己的代码知道什么类型。

如果涉及多种类型的“数据记录”,这很容易成为噩梦,所以遵循以下方法已被证明非常方便(且可扩展):

union Outer {
  1:  MyCoolClass cool;
  2:  SomeOtherData  other;
  3:  Foobar  foobar;
  // can be extended with other types as needed
}

使用用于序列化和反序列化的结构,您知道要读取/写入的实例始终是Outer