gpt4 book ai didi

java - Protobuf getAllFields() 未按预期工作

转载 作者:行者123 更新时间:2023-12-01 09:07:42 28 4
gpt4 key购买 nike

我需要解析第三方发送的 protobuf 消息并处理这些消息。我在访问字段时遇到问题的部分如下所示:

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”。

以下是我使用 protobuf(v2.6) 编译器编译生成 .java 文件的 .proto 文件的一部分:

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;
}
}
}

我错过了什么吗?还有其他方法可以访问它吗?任何帮助表示赞赏。谢谢。

最佳答案

当您看到带有数字标签的字段时,这意味着该字段是未知字段 - 线路上看到的数字与 .proto 文件中定义的任何字段名称都不匹配。

getAllFields() 仅返回已知字段,因为它返回描述符->值映射,并且描述符仅存在于已知字段。

要读取未知字段,您需要调用 message.getUnknownFields(),它返回 UnknownFieldSet 。该对象将未知字段号映射到值。

关于java - Protobuf getAllFields() 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41131076/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com