如何为未在协议中赋值的可选字段分配空间



如果我定义:

message A {
 required int32 first = 1;
 optional int32 second = 2;
}

set_second(0)然后serializeToArray()时的空间大小与set_second(14353355445)然后serializeToArray()时的空间大小不相同

是否有办法使它们具有相同的空间大小?

在其他方面,我如何使可选字段没有分配值有相同的空间大小,就像他们被分配值?

我的建议是:不要尝试在Protobuf中这样做。Protobuf不是设计给你固定的或可预测的大小,所以如果这是你想要的,那么Protobuf不是适合这项工作的工具。

当然,您可以使用像使用fixed32这样的技巧,并尝试确保您的字段始终具有非默认值,但这样您就与您的工具进行了斗争。未来可能会发生其他变化,这使得尺寸再次变得不可预测。最好选择一个符合您需求的工具

它以一种特殊的方式编码以节省带宽,因此不同的总体大小。如果你想要/需要它总是相同的大小,你可以选择使用fixed32字段类型。


您应该注意,如果您根本不为可选字段设置值,那么序列化的大小将再次不同。

最新更新