gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:59:28 30 4
gpt4 key购买 nike

我有一个类似这样的节俭结构:

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 序列化包含二进制字段的对象时,某些标记会变得困惑。那是对的吗?如果是,我对该协议(protocol)有哪些选择?我的目标是最小化生成的序列化字节数组的大小。

谢谢,安缦

最佳答案

追踪到 thrift 0.4 序列化中的一个错误。在 thrift 0.8 中运行良好。

关于java - Thrift:序列化+反序列化更改对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13572331/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com