2

如果我定义:

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

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

有没有办法让它们具有相同大小的空间?

在其他方面,如何使未分配值的可选字段具有与分配值相同的空间大小?

4

2 回答 2

1

我的建议是:不要尝试使用 Protobuf 执行此操作。Protobuf 的设计目的不是为您提供固定的或可预测的尺寸,因此如果您想要这样做,那么 Protobuf 不是适合这项工作的工具。

当然,您可以使用诸如使用fixed32和尝试确保您的字段始终具有非默认值之类的技巧,但是您正在与您的工具作斗争。未来可能会发生其他变化,这使得尺寸再次变得不可预测。最好选择符合您需求的工具。

于 2016-09-23T03:55:50.263 回答
0

以特殊方式编码以节省带宽,因此整体大小不同。如果您希望/需要它始终具有相同的大小,您可以fixed32交替使用字段类型。


但是您应该注意,如果您根本没有为可选字段设置值,则序列化大小将再次不同。

于 2016-09-22T16:44:17.290 回答