一. 介紹java
Protocolbuffer 是一種數據交換格式,相似於咱們如今使用的XML和JSON。是Google公司推出的,原本這個語言是Google公司內部使用的,隨着Google對這個格式的優化,就本着好用的東西你們分享的原則,就拿出來供你們使用(簡稱Protobuf或PB),和XML、JSON同樣它獨立於語言,獨立於平臺的。Google 提供了多種語言的實現:Java、c++ 、 Python、OC等,每一種實現都包含了相應語言的編譯器以及庫文件。能夠把它用於分佈式應用之間的數據通訊或者異構環境下的數據交換。與傳統的XML和JSON不一樣的是,它是一種二進制格式,免去了文本格式轉換的各類困擾,而且轉換效率很是快,因爲它的跨平臺、跨編程語言的特色,讓它愈來愈普及,尤爲是網絡數據交換方面日趨成爲一種主流。說白了就是這個數據格式轉換快,佔用空間小,更有利於提升程序的運行速度和執行效率。python
二. 使用c++
這裏咱們只說OC的使用,PB目前託管在GitHub,連接地址:https://github.com/google/protobuf,源碼的主要功能能夠分爲兩部分:PB基礎庫:對象->二進制數據、二進制數據->對象 這兩個轉換過程的支持;PB編譯器:源碼生成器,將proto文件文件轉成對應語言的源碼。git
1. 編譯源碼,生成PB編譯器github
編譯源碼主要的目的就是在本地生成PB的編譯器,下載好protobuf-objectivec-3.0.0-alpha-4.tar.gz文件(這個是如今比較穩定的版本也有新的版本,能夠本身去下載,流程是同樣的),執行如下的命令進行編譯:執行完成以後就可使用protoc命令了,那就能夠很方便生成不一樣語言的源碼文件。編程
2. 給工程添加PB依賴庫(咱們使用Pod 固然你也能夠下載下來託人項目中)網絡
在podfile文件中加入pod "Protobuf", "~> 3.0.0-alpha-4",你使用哪一個版本就寫什麼版本。寫好以後podinstall就好了。
3. 使用PB編譯器編譯.proto文件編程語言
建立一個person.proto文件,在文件中寫上下面的代碼,在相同目錄下中終端執行
protoc --objc_out=./ ./person.proto,這樣就會在這個目錄下生成Person.pbobjc.h和Person.pbobjc.m這兩個文件了
分佈式
message Person
{
required string name = 1;
required int32 sex = 2;
required int32 age = 3;
}
須要注意的是如今生的文件還不支持ARC,須要在工程裏添加-fno-objc-arc的標籤優化
4. 在項目中使用
// 建立對象
Person *person = [Person new];
person.name = @"MCJ";
person.sex = 1;
person.age = 30;
// 序列化爲Data
NSData *data = [person data];
// 反序列化爲對象
Person *person2 = [Person parseFromData:data error:NULL];
NSLog(@"name:%@ sex:%d age:%d",person2.name,person2.sex,person2.age);