我需要解析第三方發送的protobuf消息並處理它們。在那裏,我在訪問領域面臨的問題的一部分看起來像以下:Protobuf getAllFields()不能按預期工作
ext {\n is_foo: NO\n is_bar: false\n
12: \"fgyhcbho-4594-34545-gbvj\"\n 13: 0\n }
我主要感興趣的是獲得字段名「12」的值。但是,getAllFields()。entrySet()只返回2個條目 - is_foo和is_bar。所以我無法獲得「12」字段的值「fgyhcbho-4594-34545-gbvj」。
以下是我.proto文件的一部分,我用的protobuf(V2.6)編譯器生成的.java文件編譯:
message Ext {
optional bool is_foor = 1;
optional bool is_bar = 2;
optional string uid = 12;
optional int32 did = 13;
}
我的.java文件包含方法hasUid()和的getuid() 。但是,我收到的protobuf消息包含字段「12」而不是「uid」。所以當我嘗試反序列化到Java時,它只是不包含該字段,也沒有未知字段。
下面的代碼片段,我使用:
if (this.protoReq.getExt() != null) {
for (Map.Entry<FieldDescriptor, Object> entry : this.protoReq.getExt().getAllFields().entrySet()) {
FieldDescriptor field = entry.getKey();
if (field.getName().equals("12")) {
Object value = entry.getValue();
if (value != null) {
//do something
}
break;
}
}
}
我缺少的東西?有沒有其他方式可以訪問它? 任何幫助表示讚賞。謝謝。
謝謝@Kenton。這很好。但即使我使用getUnknownFields(),即下面的代碼: - 'Field field = this.protoReq.getExt()。getUnknownFields()。getField(12); ',返回空集合。我使用protobuf 2.6,僅供參考。 – pooja
@pooja AFAIK應該工作。 :/也許如果你提供了更多的代碼,我可以發現問題。 –
我編輯過的問題包含.proto部分。請讓我知道,如果有幫助。我被卡住了。欣賞任何指針。謝謝。 – pooja