Java “之间的关系是什么?”;字段的.proto文件中的标记号;及;生成代码中的编号(用于通过开关大小写进行解析)“;?

Java “之间的关系是什么?”;字段的.proto文件中的标记号;及;生成代码中的编号(用于通过开关大小写进行解析)“;?,java,protocol-buffers,protobuf-java,Java,Protocol Buffers,Protobuf Java,考虑下面的proto文件 syntax="proto3"; message MessageWithInternalMessage { string F1 = 1; _S1 s2 = 5; message _S1 { string C1 = 1; string C2 = 2; } } 当我们为它生成代码时。解析使用readTag()完成,然后使用switch语句设置相应的字段。或者考虑下面的片段。 while (!done) {

考虑下面的proto文件

syntax="proto3";
message MessageWithInternalMessage { 
    string F1 = 1;
    _S1 s2 = 5;
    message _S1 {
        string C1 = 1;
        string C2 = 2;
    }
}
当我们为它生成代码时。解析使用readTag()完成,然后使用switch语句设置相应的字段。或者考虑下面的片段。

 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;
        }
    }
}
我的问题是,两者之间的关系是什么 将原型文件中的“F1字段标记1”改为“生成代码中的案例10”,以及
“字段s2的标记5”到“生成代码中的情况42”。

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

header = (fieldNumber << 3) | expectedWireType;

header=(字段号,如您所说的“expectedWireType”可以取0到7之间的值。在什么情况下我应该使用3,4,6,7?@Ran 3和4是开始/结束组标记-组基本上不推荐使用,您通常不需要它们。6和7保留供将来使用。当我们为重复的可打包数据类型生成代码时,代码在生成的代码中生成为两个标记。例如,如果我的代码生成f或重复int32f=1;生成的代码将类似于案例8:{}案例10:{}这是为了使写入的数据与打包的true和打包的false兼容。我想知道从标记1生成8和10的逻辑。8是1000//1是标记,000是线格式编号,10是1010//1是标记,010是线格式编号。我的问题是为什么相同的int32有两个线格式NUM?原因是什么logic@Ran田头它们是:
header=(fieldNumber@Ran,特别是对于大型数组;当只有3个值时,显然不太清楚,但当有300个值时:这将是“{header size}{length size}{size of 300 values}”(其中长度大小通常只有几个字节)与300x“{header size}{value size}”