【问题标题】:Recursive data structures in Protocol Buffers, Apache Thrift or any other Data structure serialization protocol?Protocol Buffers、Apache Thrift 或任何其他数据结构序列化协议中的递归数据结构?
【发布时间】:2014-01-08 19:15:40
【问题描述】:

我对 Protocol Buffers、Apache Thrift 和其他数据结构序列化协议有足够的理论知识。我的问题是,如果我需要定义递归数据结构(链接列表、搜索树等)或不同对象之间的某种关系,是否有任何内置的标准方式 Protocol Buffers 或 Apache Thrift 提供设置不同结构之间的链接(我们在正常的编程实践中使用指针)?还是我们必须继续像使用指针一样在不同的数据结构对象之间建立链接?

我想用 C++ API 来做

提前感谢您! :)

【问题讨论】:

  • 协议缓冲区已经有了repeated 字段的概念,但没有真正的递归结构。据我所知,消息不能包含自身的副本。

标签: c++ apache protocol-buffers thrift-protocol


【解决方案1】:

两者都允许类型 X 的消息包含其他类型 X 的消息,都不允许消息包含自身(与 Java 序列化不同)。对于不寻常的情况,否则会非常昂贵。

但也不要发送您的实际数据模型;而是制定您自己的有效线路表示并使用序列化协议来传输它。

【讨论】:

  • 谢谢!我正在考虑用 PB 和 Thrift 做一些练习,看看它们与现有实现相比可以减少多少工作量。
【解决方案2】:

我知道这已经有百万年的历史了,但这里有一些东西:AMF(ActionScript 消息格式)。而且,在你尖叫着逃到深夜之前......这并不是那么糟糕。而且,与更流行的不同,它可以进行循环引用,这没有问题。许多个月前,我为这种格式编写了一个解码器。在 Flash 的鼎盛时期,曾经有一些其他语言的实现,如果没记错的话,有两三个 Java 库、一个 Python 库、一个 PHP 库、一个 .NET 库,甚至更多。还有一个是用 C 写的。

格式本身可能被视为 JSON 的超集,尽管它早在它之前就出现了。它旨在序列化从 JavaScrip 派生的语言,但带有一些类型注释,因此它具有某种类型的类型约束。它的人类可读形式是 ActionScript 代码(与 JavaScript 非常相似,带有一些与类型注释相关的额外关键字)。规范是开放的,可以在这里找到:http://wwwimages.adobe.com/www.adobe.com/content/dam/Adobe/en/devnet/amf/pdf/amf-file-format-spec.pdf

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 2010-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多