2012-11-26 29 views
0

我有一個節儉結構是這樣的:節儉:序列化+反序列改變對象

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

的想法是能夠通過不同類型的單一的「管」節儉的對象,並且仍然能夠正確地反序列化另一端。

但序列化一個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二進制字段的對象。那是對的嗎?如果是的話,我對協議有什麼選擇?我的目標是最小化生成的序列化字節數組的大小。

感謝, 阿曼

+0

更新:使用'TCompactProtocol'運行 – Aman

回答

0

它跟蹤到的bug節儉0.4序列化。在節儉0.8中工作良好。