protocol-buffers - 使用不支持的平台解码 Protobuf 编码数据
问题描述
我是 Protobufs 的新手;我对他们的接触不多。我们需要数据的 API 端点之一使用 Protobuf 编码数据。如果我使用诸如 JavaScript、Java、Python 甚至 R 之类的“受支持”语言来解码数据,这通常不会成为问题……
不幸的是,我正在尝试使用 Alteryx 自动化该过程。这不是一个 Alteryx 特定的问题,我有一些关于 Protobufs 本身的问题,所以我更好地理解了这种情况。我已经阅读了 Java 和 Python 中 Protobufs 的实现,并且对如何使用它们有了基本的了解。
推测(如果我错了,请纠正我),Protobuf 是一种序列化结构化数据的方法,其中 .proto 模式用于将数据编码/解码为原始二进制文件。我的困惑在于编译器。Python / Java 的 Google 文档和示例显示了如何需要 Protobuf 编译器(库)才能运行编码和解码过程。阅读谷歌网站,它建议 Protobufs 是“语言中立和平台中立的”,但如果您需要编译器(和 .proto 文件!)进行解码,我看不出这怎么可能。例如,使用谷歌编译器创建的语言之外的语言的人如何解码 Protobuf 编码数据?我错过了什么吗?
我想我遗漏了一些东西,因为公共 API 会强制执行此约束似乎很奇怪。
解决方案
这里的“语言/平台中立”仅仅意味着您可以可靠地从任何语言/框架/平台获取相同的数据。序列化格式是独立定义的,不依赖于任何特定框架的细微差别。
这可能看起来很低,但您会惊讶于有多少序列化格式无法清除它。
因为指定了格式,所以任何人都可以为其他平台创建工具。如果您不习惯处理比特,这有点繁琐,但是:完全可行。protobuf 环境不依赖于 Google - 以下是一些已知的非 Google 工具的列表:https ://github.com/protocolbuffers/protobuf/blob/master/docs/third_party.md
另外,请注意,从技术上讲,您甚至不需要 .proto;您只需要一些机制来指定哪些字段映射到哪些字段编号(因为 protobuf 不包含名称)。该列表中的相当一部分可以从 .proto 或以其他方式指定的字段/数字映射工作。.proto 的优点很简单,它很容易作为模式来传达 - 而且:不依赖于任何特定的语言。您可以为“protoc”编写插件来添加自己的工具,因此您无需从头开始编写自己的解析器。或者,如果您愿意,也可以从头开始编写自己的解析器。
推荐阅读
- c++ - One-line output operator for a binary tree
- php - Cakephp 3.6.14:在文本字段中显示 html 格式的文本
- c - Display Progress C
- rally - 从 Rally 推动 udeploy 部署
- javascript - 动画不改变位置
- json - Jersey Jackson JSON attribute change globally
- java - 如何将我的表值从 html 获取到 servlet?
- phpunit - Behat:期望发送电子邮件
- reactjs - 打字稿编译错误尝试使用material-ui withStyles
- amazon-cognito - 我们可以触发一个 lambda 函数来从 cognio 读取用户登录、注销、密码更改、用户详细信息事件吗