"tag number in .proto file of a field"和"number (used in parsing through switch case) in the generate



考虑以下原始文件。

syntax="proto3";
message MessageWithInternalMessage { 
    string F1 = 1;
    _S1 s2 = 5;
    message _S1 {
        string C1 = 1;
        string C2 = 2;
    }
}

当我们为其生成代码时。解析使用readTag(),然后进行开关语句来设置相应的字段。或考虑以下片段。

 while (!done) {
    int tag = input.readTag();
    switch (tag) {
        case 0:
            done = true;
            break;
        default: {
            if (!parseUnknownFieldProto3(input, unknownFields, extensionRegistry, tag)) {
                done = true;
            }
            break;
        }
        case 10: {
            java.lang.String s = input.readStringRequireUtf8();
            f1_ = s;
            break;
        }
        case 42: {
            Test.InternalMessageWithSeciton._S1.Builder subBuilder = null;
            if (s2_ != null) {
            subBuilder = s2_.toBuilder();
            }
            s2_ = input.readMessage(Test.InternalMessageWithSeciton._S1.parser(), extensionRegistry);
            if (subBuilder != null) {
                subBuilder.mergeFrom(s2_);
                s2_ = subBuilder.buildPartial();
            }
            break;
        }
    }
}

我的问题是proto文件中的"字段f1的标签1"至"生成代码中的情况10"one_answers"在生成代码中的情况42"字段S2的"标签5"。

标题的编码格式基本上是:

header = (fieldNumber << 3) | expectedWireType;

"电线类型"是0和7之间的整数。

  • 0 = VARINT -BASE -128编码整数,持续位
  • 1 = 64位(整数或浮点)
  • 2 =长度预定的数据 - 字节数的范围,然后是许多字节(字符串,斑点,子丝,填充阵列)
  • 5 = 32位(整数或浮点)

so字段1作为字符串为(1&lt;&lt; 3)|2是二进制1010,或:10。字段5作为一个子消息也是同样的(5&lt;&lt; 3)|2,或:42

相关内容

最新更新