Protocol Buffers,Apache Thrift或任何其他数据结构序列化协议中的递归数据结构?

时间:2014-01-08 19:15:41

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

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

我想用C ++ API

来做

先谢谢你! :)

2 个答案:

答案 0 :(得分:2)

两者都允许类型为X的消息包含其他类型为X的消息,既不允许消息包含自身(不像Java序列化)。对于一个不寻常的案例,不这样做会非常昂贵。

但是不要发送您的实际数据模型;而是计算出你自己的高效线表示并使用序列化协议来传输它。

答案 1 :(得分:0)

我知道这已经有百万年了,但这里有一些东西:AMF(ActionScript Message Format)。而且,在你开始大喊大叫之前......这并不是那么糟糕。并且,与更受欢迎的它不同,它可以做循环引用,没有问题。很多个月前我为这种格式写了一个解码器。在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