文章目录
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 |

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

1128

被折叠的 条评论
为什么被折叠?



