目录
Google Protocol Buffer 的 Encoding
概述
Protocol Buffers(又名protobuf)是Google的语言中立的, 用于序列化结构化数据的与平台无关的可扩展机制。
https://developers.google.com/protocol-buffers/
Tutorials | Protocol Buffers Documentation
GitHub - protocolbuffers/protobuf: Protocol Buffers - Google's data interchange format协议缓冲区是一种与语言无关、与平台无关的可扩展机制,用于序列化结构化数据。
协议缓冲区提供与语言无关、与平台无关、可扩展 用于在向前兼容和 向后兼容的方式。它就像JSON,除了它更小更快,而且它 生成本机语言绑定。定义数据的预期方式 结构化一次,那么您可以使用特殊生成的源代码轻松编写 并在各种数据流中读取您的结构化数据,并使用 多种语言。
协议缓冲区是定义语言(在文件中创建)的组合,定义语言是原型编译器生成用于与之交互的代码 数据、特定于语言的运行时库和数据序列化格式 写入文件(或通过网络连接发送)
协议缓冲区解决了哪些问题?
协议缓冲区为类型化、结构化的数据包提供序列化格式 最大为几兆字节的数据。
该格式适用于两者临时网络流量和长期数据存储。
协议缓冲区可以是使用新信息进行扩展,而不会使现有数据失效或要求要更新的代码。
协议缓冲区是 Google 最常用的数据格式。他们被使用 广泛用于服务器间通信以及存档存储 磁盘上的数据
因为协议缓冲区广泛用于各种服务方式 谷歌和其中的数据可能会持续一段时间,保持倒退 兼容性至关重要。
协议缓冲区允许无缝支持 更改,包括添加新字段和删除现有字段 字段,以不中断现有服务的情况下添加到任何协议缓冲区。
使用协议缓冲区有什么好处?
协议缓冲区非常适合需要序列化的任何情况 结构化的、类似记录的、中性语言、平台中立的类型化数据, 可扩展的方式。它们最常用于定义通信 协议(与 gRPC 一起)和数据存储。
使用协议缓冲区的一些优点包括:
- 紧凑的数据存储
- 快速解析
- 支持多种编程语言
- 通过自动生成的类优化功能
跨语言兼容性
相同的消息可以通过任何受支持的编程编写的代码读取 语言。您可以让一个平台上的 Java 程序从一个平台上捕获数据 软件系统,根据定义对其进行序列化,然后提取 来自单独 Python 应用程序中序列化数据的特定值 在另一个平台上运行
在不更新代码的情况下更新原型定义
软件产品向后兼容是标准,但规模较小 它们通常向前兼容。只要在更新定义时遵循一些简单的做法,旧代码就会读取新消息,而无需 问题,忽略任何新添加的字段。对于旧代码,字段是 已删除将具有其默认值,删除的重复字段将 空。有关什么是“重复”字段的信息,请参阅本主题后面的协议缓冲区定义语法。.proto
新代码也将透明地读取旧消息。新字段不会 存在于旧消息中;在这些情况下,协议缓冲区提供了合理的 默认值。
什么时候协议缓冲区不适合?
协议缓冲区不适合所有数据。特别:
- 协议缓冲区倾向于假定可以将整个消息加载到 一次内