protobuffers 中的重复字段是不是保持插入的顺序?

Posted

技术标签:

【中文标题】protobuffers 中的重复字段是不是保持插入的顺序?【英文标题】:Does repeated fields in protobuffers keep the order they are inserted?protobuffers 中的重复字段是否保持插入的顺序? 【发布时间】:2019-03-08 12:39:12 【问题描述】:

考虑以下消息。

message example  
   repeated string text; 

假设在 C++ 中,我有一个插入到示例文本字段中的字符串列表:

exemple aMessage; 
std::list<std::string> aList = ... ;
for (std::string anStr : aList) 

    aMessage.add_text(anStr);

稍后,如果我访问消息的文本,该字段的排序方式是否与我的列表相同?当我将其序列化并将其发送到某个地方时呢?

订单会保持不变吗?

【问题讨论】:

【参考方案1】:

是的,重复的字段保持项目的顺序。

来自Google's Protocol Buffers encoding specification:

解析时会保留元素之间的相互关系,但会丢失相对于其他字段的顺序。

【讨论】:

我恐怕不明白这句话的第二部分是什么意思。 @AlperenAYDIN 如果您有repeated string textArepeated string textB,则保留textAtextB 数组中的顺序。但是,从技术上讲,您可以以编码形式创建 textA[0], textB[0], textA[1], textB[1] 的消息,但在解码和重新编码后,它将看起来像 textA[0], textA[1], textB[0], textB[1] 我明白了。谢谢。 虽然问题用 C 标记,但排序是协议的一部分,因此它适用于任何语言的实现。

以上是关于protobuffers 中的重复字段是不是保持插入的顺序?的主要内容,如果未能解决你的问题,请参考以下文章

kettle数据同步方法

protobuffers 实现中的回调-?

protobuffer java中文乱码怎么解决

thrift和google protobuffer各有啥优劣

在进行小鼠插补并保存结果后,如何使缺失值保持不变?

检查我视图中的所有文本字段是不是为空目标c [重复]