如何在没有proto文件的情况下反序列化protobufs



我有生成的反序列化类,可以生成样本protobufs(字节缓冲区(。但是我没有.proto文件。我需要停止使用这些生成的类,因为它们来自可能不受支持且不可用的第三方库。如何自己解析字节缓冲区?

我考虑过:

  • 通过
    • 生成大量缓冲区并对其进行分析
    • 可能带有调试器和第三方类
    • 反向编译Java类以获得一些(丑陋的(源代码(但重构自动生成的代码似乎是个坏主意(
  • 从类文件生成.proto文件(不确定是否可能(
  • 在没有.proto文件和自动生成的代码的情况下,通用地读取protobufs,但我不确定缓冲区是否有足够的嵌入元数据来实现这一点

如何做到这一点?

协议缓冲区带有一些非常强大的反射。看看这里的消息描述符。

消息描述符包含有关特定消息类型的所有信息,因此您应该能够从中找出所有可能的字段。您可以使用直接从原型消息中获取描述符

your_proto_message.getDescriptorForType()

或使用

ProtoMessageClass.getDescriptor()

如果你只需要.proto文件表示,那么你可以在描述符上调用.toProto()。点击此处了解更多信息。

综上所述:

ProtoMessageClass.getDescriptor().toProto().toString()

最新更新