1. Protocol Buffers概述
- Protocol Buffers(简称protobuf),是谷歌用于序列化结构化数据的一种语言独立、平台独立且可扩展的机制,类似XML,但比XML更小、更快、更简单
- protobuf的工作流程如图所示
1.1 protobuf的优点
- 优点一: 支持多种语言(Cross-language Compatibility)
- 使用protobuf语法定义好数据结构后(
.proto
文件中的message),可以将其转化为各种语言的源代码,从而轻松地从/向各种数据流中读取/写入结构化数据 - 例如,基于同一个.proto文件,你可以使用
protoc
命令编译出Java、Python、C++、Go等各种语言的源码 - 具体支持哪些语言,可以参考:Third-Party Add-ons for Protocol Buffers
- 使用protobuf语法定义好数据结构后(
- 优点二: 跨项目,一次定义,多处使用(Cross-project Support)
- 可以在特定项目代码库之外的.proto文件中定义message,然后在多个项目中使用
- 例如,你可以使用Java语言将序列化数据,使用Go语言反序列化数据
- 优点三: 可扩展,支持向后兼容(
backwards compatibility
,大部分软件产品都具备)、向前兼容(forward compatibility
,不太常见)- 增加字段:旧代码读取新message,将会忽略新增加的字段;新代码读取旧message,新增加的字段会被赋予默认值
- 删除字段:旧代码读取新message,已删除的字段会被赋予默认值;新代码读取旧message,已删除的字段会被忽略?
- 总结: protobuf是Google内部最常用的数据格式,广泛应用于服务器间的通信、磁盘上数据的归档存储