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
二進制字段的對象。那是對的嗎?如果是的話,我對協議有什麼選擇?我的目標是最小化生成的序列化字節數組的大小。
感謝, 阿曼
更新:使用'TCompactProtocol'運行 – Aman