Protobuf库的使用

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编码是相对安全的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值