如何为未在协议中赋值的可选字段分配空间
How can optional fields that are not assigned values in protocbuf be allocated spaces
如果我定义:
message A {
required int32 first = 1;
optional int32 second = 2;
}
set_second(0)然后serializeToArray()时的空间大小与set_second(14353355445)然后serializeToArray()时的空间大小不相同
是否有办法使它们具有相同的空间大小?
在其他方面,我如何使可选字段没有分配值有相同的空间大小,就像他们被分配值?
我的建议是:不要尝试在Protobuf中这样做。Protobuf不是设计给你固定的或可预测的大小,所以如果这是你想要的,那么Protobuf不是适合这项工作的工具。
当然,您可以使用像使用fixed32
这样的技巧,并尝试确保您的字段始终具有非默认值,但这样您就与您的工具进行了斗争。未来可能会发生其他变化,这使得尺寸再次变得不可预测。最好选择一个符合您需求的工具
它以一种特殊的方式编码以节省带宽,因此不同的总体大小。如果你想要/需要它总是相同的大小,你可以选择使用fixed32
字段类型。
您应该注意,如果您根本不为可选字段设置值,那么序列化的大小将再次不同。
相关文章:
- 将结构字段的类型展开为可变模板参数
- 将位字段导出到数组
- 为了方便起见,我应该避免公开私有字段变量吗
- 当字段可以为null时,如何使用C++接口在Avro中写入数据
- 在java中读取c++字节的位字段
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 私有字段对象与私有继承?
- 声明没有默认构造函数的字段
- C++内存模型和位字段的最大序列
- 声明为无效的变量或字段'...' Ardunio 编译器上的错误
- 如何在QByteArray中放置和检索位字段而不会感到痛苦?
- 如何为结构字段动态分配字符空间
- 访问向量字段的键 - 枚举类还是命名空间中的枚举?
- 有什么方法可以"factor out"公共字段以节省空间?
- 限制字段突变/对命名空间的访问
- 字段名称与使用未命名命名空间的字段类型相同
- 如何在C++中用更少的空间定义类字段/方法
- 在C++构造函数中,我必须为实例字段分配空间吗
- 如何用O(n)个时间和O(1)个空间对n个对象的群进行排序.每个对象有两个字段:int和string
- 如何为未在协议中赋值的可选字段分配空间