文章目录
- Protobuf是什么
- Protobuf使⽤流程介绍
- ProtoBuf的使用
- 创建.proto⽂件
- 指定proto3语法
- package声明符
- 定义消息(message)
- 编译contacts.proto⽂件命令如下:
- 序列化与反序列化的使⽤
Protobuf是什么
ProtoBuf(全称ProtocolBuffer)是数据结构序列化和反序列化框架,它具有以下特点:
- 语⾔⽆关、平台⽆关:即ProtoBuf⽀持Java、C++、Python等多种语⾔,⽀持多个平台
- ⾼效:即⽐XML更⼩、更快、更为简单
- 扩展性、兼容性好:你可以更新数据结构,⽽不影响和破坏原有的旧程序
Protobuf使⽤流程介绍
ProtoBuf的使用
创建.proto⽂件
.proto⽂件规范
指定proto3语法
package声明符
定义消息(message)
消息(message):要定义的结构化对象,我们可以给这个结构化对象中定义其对应的属性内容。在⽹络传输中,我们需要为传输双⽅定制协议。定制协议说⽩了就是定义结构体或者结构化数据,⽐如,tcp,udp报⽂就是结构化的。再⽐如将数据持久化存储到数据库时,会将⼀系列元数据统⼀⽤对象组织起来,再进⾏存储。ProtoBuf就是以message的⽅式来⽀持我们定制协议字段,后期帮助我们形成类和⽅法来使⽤。
为contacts.proto(通讯录demo)新增联系⼈message
定义消息字段
在message中我们可以定义其属性字段,字段定义格式为:字段类型 字段名 = 字段唯⼀编号;
• 字段名称命名规范:全⼩写字⺟,多个字⺟之间⽤_连接。
• 字段类型分为:标量数据类型和特殊类型(包括枚举、其他消息类型等)。
• 字段唯⼀编号:⽤来标识字段,⼀旦开始使⽤就不能够再改变。
该表格展⽰了定义于消息体中的标量数据类型,以及编译.proto⽂件之后⾃动⽣成的类中与之对应的字段类型。在这⾥展⽰了与C++语⾔对应的类型。
2e3f6ceb4be0a0ed7282b206579a.png)
注意:
编译contacts.proto⽂件命令如下:
protoc --cpp_out=. contacts.proto
编译contacts.proto⽂件后,会⽣成所选择语⾔的代码,我们选择的是C++,所以编译后⽣成了两个
⽂件: contacts.pb.h contacts.pb.cc 。
序列化与反序列化的使⽤
创建main.cc进行测试:
注意: -lprotobuf:链接protobuf库⽂件
由于ProtoBuf是把联系⼈对象序列化成了⼆进制序列,这⾥⽤string来作为接收⼆进制序列的容器。所以在终端打印的时候会有换⾏等⼀些乱码显⽰。另外相对于xml和JSON来说,因为PB被编码成⼆进制,破解成本增⼤,ProtoBuf编码是相对安全的。