Java 节俭:序列化+;反序列化更改对象

Java 节俭:序列化+;反序列化更改对象,java,thrift,thrift-protocol,Java,Thrift,Thrift Protocol,我有一个类似这样的储蓄结构: struct GeneralContainer { 1: required string identifier; 2: required binary data; } 其思想是能够在单个“管道”上传递不同类型的节俭对象,并且仍然能够在另一端正确地反序列化 但是序列化GeneralContainer对象,然后反序列化它会更改数据字段的内容。我正在使用TBinaryProtocol: TSerializer serializer = new TSeri

我有一个类似这样的储蓄结构:

struct GeneralContainer {
    1: required string identifier;
    2: required binary data;
}
其思想是能够在单个“管道”上传递不同类型的节俭对象,并且仍然能够在另一端正确地反序列化

但是序列化
GeneralContainer
对象,然后反序列化它会更改
数据
字段的内容。我正在使用
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
序列化包含二进制字段的对象时,某些类型的标记会出错。对吗?如果是,我的协议选项是什么?我的目标是最小化生成的序列化字节数组的大小

谢谢,
Aman追踪到thrift 0.4序列化中的一个bug。在thrift 0.8中运行良好。

更新:使用
TCompactProtocol运行