【发布时间】:2012-09-01 23:22:57
【问题描述】:
使用 C++ Apache Thrift 库,是否可以只使用序列化/反序列化而不使用 RPC 服务?
据我了解this 页面,可以使用 Java 库。但是,我找不到 C++ 库的类似类。
【问题讨论】:
标签: c++ serialization thrift
使用 C++ Apache Thrift 库,是否可以只使用序列化/反序列化而不使用 RPC 服务?
据我了解this 页面,可以使用 Java 库。但是,我找不到 C++ 库的类似类。
【问题讨论】:
标签: c++ serialization thrift
我意识到这个问题是不久前提出的。我最近遇到了一个类似的用例(有一个额外的要求——将序列化的字节发送到 Kafka 集群)。这是我的answer,其中包含更完整的代码 sn-ps,说明了如何完成序列化和发送任务。
【讨论】:
如果你只是想序列化成字节(无需写入文件),你可以使用TMemoryBuffer。
boost::shared_ptr<TMemoryBuffer> buffer(new TMemoryBuffer());
boost::shared_ptr<TBinaryProtocol> binaryProtcol(new TBinaryProtocol(buffer));
obj->write(binaryProtcol.get());
obj->read((binaryProtcol.get()));
【讨论】:
obj 必须是 TBase 的实例吗?此外,一旦使用 write() 调用将obj 序列化为字节,如何访问这些结果字节?谢谢。
在 c++ 中,您可以使用 TFileTransport:
boost::shared_ptr<TFileTransport> transport(new TFileTransport(filename));
boost::shared_ptr<TBinaryProtocol> protocol(new TBinaryProtocol(transport));
yourObj.write(protocol.get()); // to write
或
yourObj.read(protocol.get()); // to read
【讨论】:
这是一个不同的邮件列表帖子,附有一些代码,展示了如何使用 thrift 序列化到 C++ 中的文件。
【讨论】:
是的,这是可能的。 Thrift 缺乏关于这个主题的文档。好吧,关于任何事情。
我在这里找到了这个:
如果不需要通过网络传输数据,我个人会使用 boost::serialization。 语法清晰,支持 JSON、XML 和二进制输出/输入。
【讨论】: