Protobuf中的重复字段是否会保持它们插入的顺序?

15

考虑以下信息。

message example { 
   repeated string text; 
}

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

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

如果我稍后访问我的消息文本,那么该字段是否按照我的列表方式排序?当我将其序列化并发送到其他地方时呢?

顺序是否保持不变?

1个回答

18

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

来自Google的协议缓冲编码规范:

在解析时,元素之间的顺序得以保留,而与其他字段的排序则会丢失。


5
很抱歉,我不太明白这个句子的第二部分是什么意思。 - Alperen AYDIN
8
如果你有“重复字符串textA”和“重复字符串textB”,那么在“textA”和“textB”数组内的顺序会保留。但是,你可以使用编码形式创建一条消息,格式为“textA[0],textB[0],textA[1],textB[1]”,但在解码和重新编码后,它将变成“textA[0],textA[1],textB[0],textB[1]”。 - jpa
我明白了。谢谢。 - Alperen AYDIN
4
虽然这个问题标记为C语言,但是顺序是协议的一部分,因此适用于任何语言的实现。 - Martin Grey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接