一、Protobuf 简介java
Protocol Buffer是google 的一种数据交换的格式,已经在Github开源,目前最新版本是3.1.0。它独立于语言,独立于平台。google 提供了多种语言的实现:Java、C#、C++、Go 和 Python,Objective-C,每一种实现都包含了相应语言的编译器以及库文件。因为它是一种二进制的格式,比使用 XML 进行数据交换快许多。能够把它用于分布式应用之间的数据通讯或者异构环境下的数据交换。做为一种效率和兼容性都很优秀的二进制数据传输格式,能够用于诸如网络传输、配置文件、数据存储等诸多领域。python
二、Protobuf的转换git
就是将咱们编写好的XXX.proto文件转成Objective C文件,也就是XXX.h和XXX.m文件,转换的工具是使用protoc这种二进制文件来生成的github
若是没有装autoconf automake libtool须要先装这几个,这里使用brew来安装,在shell执行 brew install autoconf automake libtool便可,若是没有brew请自行先安装brew。
下载面向Objective-C的protobuf库,地址为(https://github.com/google/protobuf/releases),要下载对应objective-c的版本、解压。objective-c
cd到下载的目录,依次执行:shell
再执行
- objectivec/DevTools/full_mac_build.sh网络
执行完后会看到src目录下生成了protoc二进制文件socket
编译修改好的svmp.proto文件分布式
在src目录(protoc所在目录)执行工具
protoc --proto_path=... --objc_out=... XXX.proto
其中proto_path是咱们建立的proto文件所在目录,objc_out为Objective-C文件输出路径,XXX.proto是咱们建立的proto文件,能够一次转换多个proto文件,加在XXX.proto后面便可。
举例:咱们在src目录下新建两个文件夹,gen和protocols文件夹,gen为输出目录,protocols用于存放proto文件,将建立的svmp.proto放在protocols文件夹下,执行命令
protoc --proto_path=protocols --objc_out=gen protocols/svmp.proto
而后在gen文件夹下就会生成svmp.pbobjc.h和svmp.pbobjc.m文件。
三、protobuf的集成
将生成的Ojective-C文件(上面例子的svmp.pbobjc.h和svmp.pbobjc.m)放到项目中,若是项目使用了ARC,要将.m(svmp.pbobjc.m)的Complier Flags设为-fno-objc-arc。(protobuf基于性能缘由没有使用ARC)
加入protobuf库
Podfile内 加入pod 'Protobuf', '~> 3.2.0',pod install安装该库
就能够使用svmp.pbobjc.h来解析和建立数据了
以建立屏幕信息Screeninfo这个请求为例
Request * res = [[Request alloc]init];
res.type = Request_RequestType_Screeninfo;
NSData* data = [request data];
[self.socket send:data];
解析数据
Response * resp = [Response parseFromData:message error:nil];
Response_ResponseType rt = resp.type;