搜索
您的当前位置:首页正文

跨平台数据模型框架Protocol Buffer使用环境搭建

来源:二三娱乐

ProtoBuf使用背景##

  • 编写解析代码,需要维护自定义的一套数据模型,工作量不小,维护陈本高;
  • 服务端、iOS、Android三个平台要保持同步,牵一发动全身,沟通成本高;
  • 如果使用的HTTP协议,JSON数据全部明文传输,安全系数低。

那么ProtoBuf的优势在哪里?##

  • 异常处理完善。解析代码内部封装,对外以对象形式调用,不可能出现类型错误,且空指针、空值等异常情况内部处理完成,异常的值用默认值代替;
  • 跨平台。服务端、iOS、Android共同维护一套协议文件,要变更数据传输格式时只需修改协议,并编译为各个平台的代码文件,最大限度地保持了多平台统一;
  • 传输安全。协议最终序列化后用于传输的数据,是二进制流,无法直接查看到传输的信息和数据结构,同样使用HTTP协议的环境下安全度高于JSON;
  • 存储转换算法高效。同样的UserInfo键值对数据,虽然没有官网上描述的性能那么好,但是亲测持久化文件体积是JSON的1/3,更不要说和XML相比了。编码原理有兴趣的朋友可查看。大致思路是将对象,按顺序编号和类型编号,拼接值,存储为二进制流。
  • 解析算法高效。要知道,计算机跟人不同,后者肉眼识别字符串很快,但前者是很低效的,前者的强项在于二进制位操作和顺序读取数据。解析序列化数据时就不用像JSON和XML那样找成对的符号,只需按位从前往后解析数据,然后跟数据协议模型中的定义对应起来。

环境搭建##

1、 安装Command Line Tools
2、 安装Home-brew

ruby -e "$(curl -fsSL 

3、 使用home-brew安装protobuf编译工具:brew install protobuf
如果要编译OC版本,则还需要安装

  • brew install automake
  • brew install libtool

4、ProtoBuf协议文件编译为.java模型:

protoc --java_out=/Users/xxx/Desktop/proto -I/Users/xxx/Desktop/proto /Users/xxx/Desktop/proto/marriage.proto

Android studio有默认的文件大小限制,更改配置idea.max.intellisense.filesize=2560000的值,可以放宽限制。配置文件的位置在/Applications/Android Studio.app/Contents/bin/idea.properties

protobuf-master/src/protoc --objc_out="模型文件导出目录" -I "协议文件导入目录" "协议文件导入目录"/test.proto

最后,导入ProtoBuf相关文件到工程下,如下图:

导入到工程的ProtoBuf相关文件

  这个运行时库有讲究,在工程里调用的,要么保留除了GPBProtocolBuffers.m之外的所有.m文件;要么仅保留一个.m文件GPBProtocolBuffers.m。因为GPBProtocolBuffers.m包含了其他所有.m,这里我们采用后者。


GPBProtocolBuffers.m 为工程添加头文件搜索设置

工程中的详细文件结构参考文末的Demo。

编译生成的.h和.m文件需要在使用ARC的工程中标明例外。
Top