一、概述
- Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。
2.一种语言无关、平台无关、扩展性好的、轻便高效的的结构化数据串行化方法。用于通信协议、数据存储的结构化数据串行化方法。
3.目前官方已提供主流平台(Windows,osx,Android,iOS,Linux…),主流语言(C++,C#,JS,JAVA,Objective-C,Ruby,Python…)的支持。
二、编译器下载及安装
- 下载地址:https://github.com/google/protobuf/releases
2.不同平台需要安装对应平台的编译器
三、ProtoBuf源文件
Test.proto 文件 // Test是文件名,proto文件后缀
文件内容
syntax = “proto3”; //声明:当前使用的文件语法是 proto3 (对应有proto2标准)
message Person{ //Person 是数据结构名称(类似于数据类的类名), 前缀message表示其在文件中属于消息类型。(对应有enum前缀,表示枚举类型)
string name = 1;// (字段名name, 类型为string(字符串类型), 在结构体中的编号是1)
int32 age = 2; //(字段名name, 类型为int32(32位整型数), 在结构体中的编号是2)
float weight = 3;// (字段名name, 类型为float(单精度浮点数), 在结构体中的编号是3)
bytes emailData= 4; //(字段名name, 类型为bytes (二进制data类型), 在结构体中的编号是4)
repeated Person children = 5; //(字段名children , 类型为repeated (数组类型),数组的元素类型为Person, 在结构体中的编号是5)
}
四、编译
不同平台用自己的编译器,编译protobuf源文件,得到自己平台的对应语言的源代码
五、Objective-C源文件
- Person类为protobuf 源文件Test.proto定义的数据类,两者间的字段名及字段类型是相互配置的
- Person类继承于protobuf框架中的 GPBMessage类,GPBMessage类提供数据序列化函数(data)及反序列化函数(initWithData)
-
不同语言间的数据序列化函数及反序列化函数的函数名有所差异。
六、参考
•1.https://blog.csdn.net/xiaofei0859/article/details/53169687
•2.https://github.com/google/protobuf/releases
•3.https://www.cnblogs.com/tandaxia/p/6181534.html