【问题标题】:Thrift: Is it possible to do only serialization with C++ Thrift library?Thrift:是否可以只使用 C++ Thrift 库进行序列化?
【发布时间】:2012-09-01 23:22:57
【问题描述】:

使用 C++ Apache Thrift 库,是否可以只使用序列化/反序列化而不使用 RPC 服务?

据我了解this 页面,可以使用 Java 库。但是,我找不到 C++ 库的类似类。

【问题讨论】:

    标签: c++ serialization thrift


    【解决方案1】:

    我意识到这个问题是不久前提出的。我最近遇到了一个类似的用例(有一个额外的要求——将序列化的字节发送到 Kafka 集群)。这是我的answer,其中包含更完整的代码 sn-ps,说明了如何完成序列化和发送任务。

    【讨论】:

    • 其中一个和今天一样是重复的。我的建议是考虑以一种不重复的方式重新表述另一个问题,即关注问题的卡夫卡部分。
    • 感谢您指出这一点。我已将另一个问题改写为专注于 Kafka。如果需要更多更改,请告诉我。
    【解决方案2】:

    如果你只是想序列化成字节(无需写入文件),你可以使用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 序列化为字节,如何访问这些结果字节?谢谢。
    【解决方案3】:

    在 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
    

    【讨论】:

      【解决方案4】:

      这是一个不同的邮件列表帖子,附有一些代码,展示了如何使用 thrift 序列化到 C++ 中的文件。

      http://mail-archives.apache.org/mod_mbox/thrift-user/201203.mbox/%3C90483D01-ED25-4707-9DB2-5BB3627301FC@manbert.com%3E

      【讨论】:

        【解决方案5】:

        是的,这是可能的。 Thrift 缺乏关于这个主题的文档。好吧,关于任何事情。

        我在这里找到了这个:

        http://mail-archives.apache.org/mod_mbox/thrift-user/201010.mbox/%3C5EF8F634-79A2-45C4-9A04-6D96D3B7A84F@manbert.com%3E

        如果不需要通过网络传输数据,我个人会使用 boost::serialization。 语法清晰,支持 JSON、XML 和二进制输出/输入。

        【讨论】:

        • 谢谢。 Thrift 文档几乎不存在。
        • 与此同时(自 2012 年以来),有大量可用的文档。尽管如此,关于“仅序列化”,它还是有一些道理的。 Alttough 可以从 RPC 的完整解决方案中派生出来,我们可以做得更好 => THRIFT-4128
        猜你喜欢
        • 2016-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-19
        • 2015-06-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多