如何从 proto buf UDP 数据流中获取扩展类型

How to get extension type from proto buf UDP data stream

我正在使用 java 和支持扩展的 proto buf 读取 UDP 流。

在任何给定时间,我可以获得三种不同类型的数据,它们对应于三种不同类型的原型文件。

我正在使用

            registry.add(CpuUtilization.cpuUtilExt);
            registry.add(NpuUtilization.npuExt);
            registry.add(Optics.opticsExt);

所有三个原型文件都使用下面提到的扩展语法

 extend NetworksSensors {
        optional PFEHeapInfo pfeHeapInfoExt = 1;
    }
    extend NetworksSensors {
        optional NpuUtilization npuExt = 2;
    }
    extend NetworksSensors {
        optional CpuUtilization cpuUtilExt = 3;
    }

我正在做的是创建三个独立的方法,并根据 header 字段中的值处理每种类型传感器的数据。

有没有一种方法可以根据即将到来的扩展数据来决定调用哪个方法?

可能描述符中的某些字段可以提供帮助,但我不知道如何使用它。有什么想法吗?

我找到了一种方法来检查数据中是否有特定的扩展名,但仍然需要弄清楚如何从 networksSensors 对象中获取扩展名对象。

networksSensors.hasExtension(FirewallClass.firewallExt)

FirewallClass class 是使用 protoc 编译器自动生成的 class。