Thrift:序列化+反序列化更改对象

时间:2012-11-26 20:09:06

标签: java thrift thrift-protocol

我有一个像这样的thrift结构:

struct GeneralContainer {
    1: required string identifier;
    2: required binary data;
}

这个想法是能够在一个“管道”上传递不同类型的thrift对象,并且仍然能够在另一侧正确地反序列化。

但序列化GeneralContainer对象,然后反序列化会更改data字段的内容。我正在使用TBinaryProtocol

TSerializer serializer = new TSerializer(new TBinaryProtocol.Factory());
TDeserializer deserializer = new TDeserializer(new TBinaryProtocol.Factory());

GeneralContainer container = new GeneralContainer();
container.setIdentifier("my-thrift-type");
container.setData(ByteBuffer.wrap(serializer.serialize(myThriftTypeObject)));

byte[] serializedContainer = serializer.serialize(container);
GeneralContainer testContainer = new GeneralContainer();
deserializer.deserialize(testContainer, serializedContainer);
Assert.assertEquals(container, testContainer);  // fails

我的猜测是,当我们使用TBinaryProtocol序列化包含二进制字段的对象时,某些标记会变得混乱。那是对的吗?如果是,我对协议的选择是什么?我的目标是最小化生成的序列化字节数组的大小。

谢谢, 阿曼

1 个答案:

答案 0 :(得分:0)

将其跟踪到thrift 0.4序列化中的错误。在节俭0.8中工作得很好。