我需要解析第三方发送的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