私は次のような倹約構造体を持っています:
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
。あれは正しいですか?はいの場合、プロトコルのオプションは何ですか? 私の目標は、結果のシリアル化されたバイト配列のサイズを最小限に抑えることです。
ありがとう、アマン