Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无源文件反序列化protobufs_Java_Ruby_Protocol Buffers - Fatal编程技术网

Java 无源文件反序列化protobufs

Java 无源文件反序列化protobufs,java,ruby,protocol-buffers,Java,Ruby,Protocol Buffers,是否可以在不访问源.proto文件/生成的类的情况下反序列化protobuf消息?我的源系统使用Ruby生成消息,并使用Java。源系统可以创建消费者无法轻松了解的新消息格式。或者,消费者访问原型类的最佳方式是什么?有没有可能有某种原始存储库 如果没有模式(.proto文件或编译的描述符),您只能将Protobuf解码为一系列标记/值对,其中标记为数字,值的类型信息有限。这可能足以让人对协议进行反向工程,但通常对代码没有用处 通过发送文件描述符集(基本上是相关.proto文件的编译版本),可以将

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

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

通过发送
文件描述符集
(基本上是相关
.proto
文件的编译版本),可以将架构与有效负载一起发送,如下所述:

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

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

  • 您可以有一个基于模式将消息转换为JSON的代理
  • 您可以使用一个存储系统来解析消息,以便以不同的形式存储它。例如,它可以转换行和列以获得更好的压缩,或者对字段进行某种索引

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

您希望如何处理尚未告知其含义的原始消息?你只是把它们传给其他地方吗?差不多-要么把它们传给其他地方,要么把它们保存在其他地方。那你为什么要反序列化它们呢?您总是可以只存储原始字节。(反序列化它们将非常困难或不可能,但不清楚您是否真的必须这样做。)想法是将其存储在配置单元表中-所有方法似乎都需要访问源proto才能反序列化。不清楚您希望如何处理尚未告知其含义的数据。您可以发送proto描述符,我想它们将protobuf消息格式描述为proto本身。