Protocol Buffer搭建及示例

 本文来源:http://www.tanhao.me/code/150911.html/html

 

Protocol Buffer(简称Protobuf或PB)是由Google推出的一种数据交换格式,与传统的XML和JSON不一样的是,它是一种二进制格式,免去了文本格式转换的各类困扰,而且转换效率也是很是快,因为它的跨平台、跨编程语言的特色,让它愈来愈普及,尤为是网络数据交换方面日趋成为一种主流.ios

PB目前托管在GitHub,连接地址:https://github.com/google/protobuf,源码的主要功能能够分为两部分:git

  • PB基础库:完成对象->数据的序列化、数据->对象的反序列化这两个转换过程的支持;
  • PB编译器:源码生成器,将PB格式定义文件.proto(PB数据格式的一种定义文件)转换为对象源码(支持C++,JAVA,Python等格式).

截止目前PB的最新版本为3.0.0-beta-1(alpha-4),已经加入了对Objective-C的支持(其它以前低版本中也已经有OC扩展支持),如下的示例便以该版本为例.github

###1.编译源码,生成PB编译器###
编译源码主要的目的就是在本地生成PB的编译器,下载好protobuf-objectivec-3.0.0-alpha-4.tar.gz文件,执行如下的命令进行编译:编程

1
2
3
4
5
6
tar -xzvf protobuf-objectivec-3.0.0-alpha-4.tar.gz
cd protobuf-3.0.0-alpha-4
./configure
make
make check
sudo make install

若是编译顺利的话,即可以使用protoc命令了,之后即可以用这个命令将.proto文件转换为不一样语言的源代码文件.网络

###2.为工程添加PB依赖库###
须要在项目中使用ProtocolBuffer,须要将依赖库添加到项目中来,刚才下载的源码objectivec目录中已经包含一个可编译libProtocolBuffers.a静态库的工程,直接引入工程便可,固然ProtocolBuffer项目也支持cocoapods的方式引入,在你的Podfile中添加:编程语言

1
2
platform :ios, '7.1'
pod "Protobuf", "~> 3.0.0-alpha-4"

###3.使用PB编译器编译.proto文件###
为了验证咱们的ProtocolBuffer环境已经搭建好了,如下就来小试牛刀,建立相似如下的test.proto文件:ui

1
2
3
4
5
6
message Person
{
required string name = 1; //姓名
required int32 sex = 2; //性别
required int32 age = 3; //年龄
}

而后经过如下的命令生成生成Model的源代码文件:google

1
protoc --objc_out=./ ./test.proto

在当前目录即可以看到Test.pbobjc.h和Test.pbobjc.m这两个文件了(须要注意的是生成的代码是MRC的,若是引入ARC工程中记得添加-fno-objc-arc的标签).code

###4.在项目中使用PB完成序列化&反序列化###
将上个步骤中生成的源代码添加到工程之中,你就能够直接使用他们了,使用起来很是的方便,示例以下:

1
2
3
4
5
6
7
8
9
10
11
12
// 建立对象
Person *person = [Person new];
person.name = @"TanHao";
person.sex = 1;
person.age = 28;
 
// 序列化为Data
NSData *data = [person data];
 
// 反序列化为对象
Person *person2 = [Person parseFromData:data error:NULL];
NSLog(@"name:%@ sex:%d age:%d",person2.name,person2.sex,person2.age);
相关文章
相关标签/搜索