在没有源文件的情况下反序列化protobufs

时间:2016-02-05 23:03:00

标签: java ruby protocol-buffers

是否可以在不访问源.proto文件/生成的类的情况下反序列化protobuf消息?我的源系统使用Ruby生成消息并使用Java。源系统可以创建消费者无法轻易了解的新消息格式。或者,消费者访问proto类的最佳方式是什么?是否有可能拥有某种原型存储库?

1 个答案:

答案 0 :(得分:1)

如果没有架构(.proto文件或编译Descriptor),您只能将Protobuf解码为一系列标签/值对,其中标签是数字且值具有有限的类型信息。这可能足以让人对协议进行反向工程,但通常对代码没用。

可以通过发送FileDescriptorSet(基本上是相关.proto文件的编译版本)来发送架构和有效负载,如下所述:

https://developers.google.com/protocol-buffers/docs/techniques#self-description

然而,这并不像听起来那么有用! FileDescriptorSet将允许您确定字段的名称和类型,但这并不意味着您的代码将知道如何处理它们。

也就是说,有一些可能的用例:

  • 您可以拥有一个代理,根据架构将消息转换为JSON。
  • 您可以拥有一个存储系统来解析邮件,以便以不同的形式存储邮件。例如,它可能会转换行和列以获得更好的压缩效果,或者可能会对字段进行某种索引。

但是,在这些用例中,我通常会建议使用必要的模式预先配置代理或存储系统,而不是每条消息都发送它们,因为模式往往非常大。

相关问题