[TOC]

概述

概述

文章参考:https://tennysonsky.blog.csdn.net/article/details/73920680

消息格式

1
2
3
4
5
6
7
8
syntax = "proto3"; //指定版本信息,不指定会报错

message Person //message为关键字,作用为定义一种消息类型
{
string name = 1; //姓名
int32 id = 2; //id
string email = 3; //邮件
}

消息由至少一个字段组合而成,类似于C语言中的结构体,每个字段都有一定的格式:

1
数据类型 字段名称 = 唯一的编号标签值;

字段名称:protobuf建议以下划线命名而非驼峰式
唯一的编号标签:代表每个字段的一个唯一的编号标签,在同一个消息里不可以重复。这些编号标签用与在消息二进制格式中标识你的字段,并且消息一旦定义就不能更改。需要说明的是标签在1到15范围的采用一个字节进行编码,所以通常将标签1到15用于频繁发生的消息字段。编号标签大小的范围是1到229。此外不能使用protobuf系统预留的编号标签(19000 ~19999)。

数据类型

.proto类型
float float 32位浮点数
int32 int32 32位整数
int64 int64 64位整数
uint32 uint32 32位无符号整数
uint64 uint64 64位无符号整数
sint32 int32 32位整数,处理负数效率比int32更高
sint32 sint64 64位整数,处理负数效率比int64更高
fixed32 uint32 总是4个字节。如果数值总是比总是比228大的话,这个类型会比uint32高效。
fixed64 uint64 总是8个字节。如果数值总是比总是比256大的话,这个类型会比uint64高效。
sfixed32 int32 总是4个字节
sfixed64 int64 总是8个字节
bool bool 布尔类型
string string 一个字符串必须是UTF-8编码或者7-bit ASCII编码的文本
bytes string 处理多字节的语言字符、如中文
enum enum 枚举
message object of class 自定义的消息类型
C++类型 备注
double double 64位浮点数