Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1285464
  • 博文数量: 315
  • 博客积分: 10397
  • 博客等级: 上将
  • 技术积分: 3731
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-07 21:21
文章分类

全部博文(315)

文章存档

2015年(10)

2014年(3)

2013年(2)

2012年(8)

2011年(8)

2010年(29)

2009年(59)

2008年(77)

2007年(119)

分类: LINUX

2015-11-05 20:07:50

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

PB目前托管在GitHub,链接地址:,源码的主要功能可以分为两部分:

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

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

1.编译源码,生成PB编译器

编译源码主要的目的就是在本地生成PB的编译器,下载好文件,执行以下的命令进行编译:

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文件:

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

然后通过以下的命令生成生成Model的源代码文件:

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

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

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); 

阅读(1053) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~