一. 介绍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);