【问题标题】:Using required bytes in a .proto file在 .proto 文件中使用所需的字节
【发布时间】:2014-06-24 13:40:34
【问题描述】:

我对@9​​87654323@(应该)在通过Google Protocol Buffers 进行序列化/反序列化时如何工作感到摸不着头脑。

给定这样的原型:

message MyMessage
{
    // 0 or more bytes
    required bytes content = 1;
}

optional bytes 字段相比,我预计会出现某种不同的行为。我能说的是,没有办法区分线上的空字节数组和零长度字节数组。

附带说明:我们使用Protobuf-Net,它有时会添加一些额外的糖(如非空List<> 用于空/空重复字段)但对于字节,我们总是在零/空字节数组的情况下为空,不管required/optional

简而言之,requiredbytes 字段有什么影响(如果有)?如果没有,总是使用optional bytes 会更好吗?

【问题讨论】:

    标签: c# .net serialization protocol-buffers protobuf-net


    【解决方案1】:

    我不具体了解 Protobuf-Net,但在大多数 Protobuf 实现中,每个字段都有一个 has 访问器,它返回 true 或 false 以指示字段是否已显式设置.您可以将字节字段显式设置为空。 required 只是确保你不要忘记设置它。

    我实际上强烈建议您永远不要使用requiredIt turns out required fields were a huge misfeature.

    【讨论】:

    • 嗯,这是否意味着某些内容被序列化为“字段集”或类似内容?反序列化器如何知道该字段已设置(无论实现如何)?
    • 使用 Protobufs,只有明确设置的字段才会在线发送。该协议是一系列标签/值对,因此解析器可以判断哪些不存在。 (Cap'n Proto 在这张记录中非常不同。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2017-05-23
    • 1970-01-01
    • 2020-03-11
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多