Protocol Buffers(protobuf)是Google开发的一种语言中立、平台中立、可扩展的序列化结构数据的机制。它主要用于数据存储和网络通信,尤其是在gRPC中。
1. 基本概念
消息(Message):protobuf的数据结构,类似于JSON或XML。消息由字段组成,每个字段有一个名称和类型。
字段(Field):消息中的基本单位。每个字段都有一个唯一的编号,protobuf使用这个编号在序列化时标识字段。
2. 语法
protobuf有两种语法版本:proto2和proto3。proto3是推荐使用的版本,具有更简单的语法和更强的功能。
proto3 示例
protobuf
syntax = "proto3";
message Person {
string name = 1; // 字段类型为字符串,编号为1
int32 id = 2; // 字段类型为整型,编号为2
string email = 3; // 字段类型为字符串,编号为3
repeated string phone_numbers = 4; // 可重复字段 可以理解为数组list
}
3. 基本类型
protobuf支持多种数据类型,包括:
整数类型:int32, int64, uint32, uint64, sint32, sint64
浮点数类型:float, double
布尔类型:bool
字符串:string
字节数组:bytes
枚举类型:enum
4. 高级特性
嵌套消息:可以在消息中定义其他消息。
默认值:在proto3中,字段在未赋值时会使用默认值(例如,0、false、空字符串等)。
optional和repeated:在proto3中,字段默认是optional(可选的)。使用repeated定义可重复字段(可以理解为数组)
5. 序列化与反序列化
protobuf提供了高效的序列化和反序列化方法,可以将消息转换为字节流,便于网络传输或文件存储。
6. 使用场景
服务间通信:gRPC使用protobuf进行服务定义和数据交换。
数据交互与存储:将复杂的数据结构存储为protobuf格式,以减少存储空间。
配置文件:使用protobuf作为配置文件格式。