通过Google Protocol Buffers序列化/反序列化时,我对required bytes
(应该)的工作方式感到头疼。
鉴于这样的原型:
message MyMessage
{
// 0 or more bytes
required bytes content = 1;
}
与optional bytes
字段相比,我预计会有某种不同的行为。我所知道的是,无法区分线上空字节数组和零长度字节数组之间的区别。
作为旁注:我们正在使用Protobuf-Net,有时会为空/空重复字段添加一些额外的糖(如非空List<>
)但是对于字节,我们总是在零的情况下为空/ null字节数组,不管required/optional
。
简而言之,required
对bytes
字段有什么影响?如果没有,那么最好总是使用optional bytes
吗?
答案 0 :(得分:0)
我不是特别了解Protobuf-Net,但在大多数Protobuf实现中,每个字段都有一个has
访问器,它返回true或false以指示字段是否已明确 集。您可以显式将字节字段设置为空。 required
只是确保你不要忘记设置它。
我实际上强烈建议您永远不要使用required
。 It turns out required fields were a huge misfeature.