2
다음 프로토 파일을 고려하십시오."필드의 .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)"의 관계가 무엇을 행 "케이스 (42)"필드 (S2)에 대한 태그 (5) "및 "케이스 (10)에서 생성 한 코드에서 " 생성 된 코드에서 ".
Gravel "expectedWireType"은 0과 7 사이의 값을 가질 수 있습니다. 어떤 경우에 3,4,6,7을 사용해야합니까? – Ran
@Ran 3과 4는 시작/끝 그룹 마커입니다. 그룹은 주로 사용되지 않으며 일반적으로 필요하지 않습니다. 6 및 7은 향후 사용을 위해 예약되어 있습니다. –