【Protobuf速成指南】.proto文件的编写与编译

本文介绍了如何使用ProtocolBuffers(Protobuf)的proto3语法编写.proto文件,包括文件规范、注释、package声明、message定义以及消息字段的编写。接着,讲述了如何编译.proto文件,使用protoc工具生成C++代码,并分析了生成的源码。最后,通过示例展示了序列化和反序列化的使用方法,强调了Protobuf在数据存储和传输中的高效性。

1.0版本

 本系列文章将通过对通讯录项目的不断完善,带大家由浅入深的学习Protobuf的使用。这是Contacts的第一个版本,在这篇文章中将带大家快速上手Protobuf

一、编写.proto文件

1.文件规范:

  • 创建.proto文件时,文件命名应该使用全小写字母命名,多个字母之间用 _ 连接。例如:lower_snake_case.proto
  • 书写.proto文件代码时,应使用2个空格的缩进

2.注释方式:

使用 // 或者 /**/ 进行注释

3.指定proto3语法:

在文件首行中指定该proto文件所采用的语法

syntax = "proto3";

🎯[说明]: ProtocolBuffers 语言版本3,简称 proto3,是 .proto 文件最新的语法版本。相较于proto2,语法更加简化,使用更加简单

4.package申明符

package xxx;  // 可选

🎯[说明]: 声明的package在项目中应该具有唯一性,它的作用是避免我们定义的消息发生冲突。它就类似于C++的命名空间,实际上进过编译器编译后就会变成相同名字的 命名空间

5.定义message

 消息(message)就是要定义的结构化对象,我们可以给这个结构化对象中定义其对应的消息字段。message经编译器编译后转变成对应的类(C++)

// message 格式
message MessageName{   

}
// 消息类型命名规范:使用驼峰命名法,首字母大写

6.编写消息字段

消息字段的格式定义为:类型 字段名 = 唯一编号

• 字段名称命名规范:全小写字母,多个字母之间用 _ 连接。
• 字段类型分为:标量数据类型和特殊类型(包括枚举、其他消息类型等)。
• 字段唯一编号:用来标识字段,一旦开始使用就不能够再改变

①类型对照表
.proto type note C++ type
double double
float float
int32 使用变长编码[1]。负数的编码效率较低⸺若字段可能为负值,应使用sint32代替。 int32
int64 使用变长编码[1]。负数的编码效率较低⸺若字段可能为负值,应使用sint64代替。 int64
uint32 使用变长编码[1] uint32
uint64 使用变长编码[1] uint64
sint32 使用变长编码[1]。符号整型。负值的编码效率高于常规的int32类型。 int32
sint64 使用变长编码[1]。符号整型。负值的编码效率高于常规的int64类型。 int64
fixed32 定长4字节。若值常大于2^28则会比uint32更高效 uint32
fixed64 定长8字节。若值常大于2^56则会比uint64更高效 uint64
sfixed32 定长4字节。 int32
sfixed64
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罅隙`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值