gpt4 book ai didi

java - java中PB的泛型解析

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:09:06 33 4
gpt4 key购买 nike

是否可以在 Java 中以通用方式解析 protobuf?

我查看了 GeneratedMessage,但找不到将任何 PB 字节缓冲区解析为 GeneratedMessage 的方法。

本质上,我试图将 PB 字节缓冲区解析为 GeneratedMessage,然后我将使用反射来检测其中的字段。

最佳答案

首先,不知道schema是无法解析PB数据的。该模式最初来自“.proto”文件,通常嵌入到 protoc 生成的代码中。但是,您也可以告诉 protoc 以 Java Protobuf 库可用的格式存储模式:

protoc --descriptor_set_out=mymessages.desc mymessages.proto

然后将其加载到您的 Java 代码中:

FileInputStream fin = new FileInputStream("mymessages.desc");
Descriptors.FileDescriptorSet set =
Descriptors.FileDescriptorSet.parseFrom(fin);
Descriptors.Descriptor md = set.getFile(0).getMessageType(0);

一旦您有了消息的架构 (Descriptor.Descriptor),解析消息就很容易了:

byte[] data = ...;
DynamicMessage m = DynamicMessage.parseFrom(md, data);

DynamicMessage 有一个反射 API,可让您查看字段。

麻烦的部分是调用 protoc 工具将“.proto”文件转换为可用格式。 C++ Protobuf 库有一种方法可以直接加载“.proto”文件,但不幸的是 Java Protobuf 库没有。

关于java - java中PB的泛型解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4035027/

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