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);
相關文章
相關標籤/搜索