protocol buffer全称Google Protocol Buffers,是google开发的一套用于数据存储,网络通讯的协议编解码的工具库,与XML或者JSON相差很少,即把某种数据结构的信息,以某种格式(XML,JSON)保存起来,可是protobuf与XML和JSON不一样在于,protobuf是基于二进制的。与XML和JSON的性能相别则是不言而喻的。 关于相关的性能对比能够看这里。 数组
Protobuf目前为止有两个版本,proto2和proto3,proto3与proto2相比支持更多语言,更加简介,去掉了一些复杂的语法与特性,,更强调约定而弱化语法。 网络
以下proto文件 数据结构
syntax = "proto2"; 工具
package msg; 性能
message CS_PlayerLogin{ ui
required string account=1; google
required string pwd=2; spa
} blog
message SC_PlayerLogin{ ip
//0成功 1帐号错误 2密码错误
required sint32 result=1;
required uint64 playerId=2;
以后再跟上数据类型,数据类型以后为字段名字,最后再跟上"=N",此处N是标志位,每一个字段都有标志位,各个标志位不能重复且为正整数,其最大值为 2^29 - 1,同时protobuf内部预留了19000到19999不能被用户使用,官方建议将经常使用的字段放在前面,因为这个字段的大小随着数值大小增长,如1-16只占用一个字节(推荐消息字段个数很少余16个)。最后能够跟上自定义的默认值。
import "person.proto";
//引入外部proto文件,并让引入了该文件的proto文件也能访问被引入类型。
import public "person.proto";
protocol buffer的经常使用基础数据类型:
数据类型 |
描述 |
字节个数 |
C#语言映射 |
bool |
布尔类型 |
1 |
bool |
double |
64位浮点数 |
N |
double |
float |
32为浮点数 |
N |
float |
int32 |
32位整数 |
N |
int |
uin32 |
无符号32位整数 |
N |
uint |
int64 |
64位整数 |
N |
long |
uint64 |
64为无符号整 |
N |
ulong |
sint32 |
32位整数,处理负数效率更高 |
N |
int |
sing64 |
64位整数 处理负数效率更高 |
N |
long |
fixed32 |
32位无符号整数 |
4 |
uint |
fixed64 |
64位无符号整数 |
8 |
ulong |
sfixed32 |
32位整数、能以更高的效率处理负数 |
4 |
uint |
sfixed64 |
64为整数 |
8 |
ulong |
string |
只能处理 ASCII字符 |
N |
string |
bytes |
用于处理多字节的语言字符、如中文 |
N |
string |
enum |
能够包含一个用户自定义的枚举类型uint32 |
N(uint32) |
enum |
message |
能够包含一个用户自定义的消息类型 |
N |
object of class |
map |
键值对,键可以使用string或数值类型 |
N |
Dictionary |