Protocol Buffer搭建及示例
本文来源:http://www.tanhao.me/code/150911.html/
Protocol Buffer(简称Protobuf或PB)是由Google推出的一种数据交换格式,与传统的XML和JSON不同的是,它是一种二进制格式,免去了文本格式转换的各种困扰,并且转换效率也是非常快,由于它的跨平台、跨编程语言的特点,让它越来越普及,尤其是网络数据交换方面日趋成为一种主流.
PB目前托管在GitHub,链接地址:https://github.com/google/protobuf,源码的主要功能可以分为两部分:
- PB基础库:完成对象->数据的序列化、数据->对象的反序列化这两个转换过程的支持;
- PB编译器:源码生成器,将PB格式定义文件.proto(PB数据格式的一种定义文件)转换为对象源码(支持C++,JAVA,Python等格式).
截止目前PB的最新版本为3.0.0-beta-1(alpha-4),已经加入了对Objective-C的支持(其它之前低版本中也已经有OC扩展支持),以下的示例便以该版本为例.
###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文件:
|
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);
|
Protocol Buffer搭建及示例的更多相关文章
- iOS之ProtocolBuffer搭建和示例demo
这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...
- [原创翻译]Protocol Buffer Basics: C#
Protocol Buffer 基础知识:c# 原文地址:https://developers.google.com/protocol-buffers/docs/csharptutorial ...
- Google Protocol Buffer 的使用和原理[转]
本文转自: http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/ Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构 ...
- Protocol Buffer技术
转载自http://www.cnblogs.com/stephen-liu74/archive/2013/01/02/2841485.html 该系列Blog的内容主体主要源自于Protocol Bu ...
- Corba、protocol buffer、SOA的区别 (转)
From: http://www.zhihu.com/question/20279489 Google的protocol buffers?这个跟corba.soa没啥关系,不同层次的概念,没法比.pr ...
- Protocol Buffer技术详解(数据编码)
Protocol Buffer技术详解(数据编码) 之前已经发了三篇有关Protocol Buffer的技术博客,其中第一篇介绍了Protocol Buffer的语言规范,而后两篇则分别基于C++和J ...
- Protocol Buffer技术详解(Java实例)
Protocol Buffer技术详解(Java实例) 该篇Blog和上一篇(C++实例)基本相同,只是面向于我们团队中的Java工程师,毕竟我们项目的前端部分是基于Android开发的,而且我们研发 ...
- Protocol Buffer技术详解(C++实例)
Protocol Buffer技术详解(C++实例) 这篇Blog仍然是以Google的官方文档为主线,代码实例则完全取自于我们正在开发的一个Demo项目,通过前一段时间的尝试,感觉这种结合的方式比较 ...
- Protocol Buffer技术详解(语言规范)
Protocol Buffer技术详解(语言规范) 该系列Blog的内容主体主要源自于Protocol Buffer的官方文档,而代码示例则抽取于当前正在开发的一个公司内部项目的Demo.这样做的目的 ...
随机推荐
- ORACLE百万记录SQL语句优化技巧
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 【09-27】Spring 学习笔记
SpringMVC 配置全局异常处理器 import javax.servlet.http.HttpServletResponse; import org.springframework.web.bi ...
- java发送 email
public class EmailUtils implements IAction { private static Logger logger = Logger.getLogger(EmailUt ...
- mysql存储过程和存储函数
mysql存储过程和存储函数 存数函数代码示例: DROP PROCEDURE IF EXISTS calc_ci_day_suc_rate; delimiter // CREATE FUNCTION ...
- 用.htaccess文件实现URL重写
注:第一部分来自 http://www.cnblogs.com/wangkongming/archive/2012/11/13/2768251.html 这位博主的个人网站简洁 还有诗歌 ...
- 第4月第2天 nsinvocation崩溃 mvc videotrack
1. __unsafe_unretained id result = nil; [invocation getReturnValue:&result]; return result; http ...
- 理解Attribute
注:本文转载自http://kb.cnblogs.com/page/87531/ Attribute与Property 的翻译区别 Attribute 一般译作“特性”,Property 仍然译为“属 ...
- Doctype的作用
<!DOCTYPE> 声明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令,也就是定义文档类型. 所有的浏览器都需要两种模式:怪异模式和严格模式 ...
- 第三篇 基于.net搭建热插拔式web框架(重造Controller)
由于.net MVC 的controller 依赖于HttpContext,而我们在上一篇中的沙箱模式已经把一次http请求转换为反射调用,并且http上下文不支持跨域,所以我们要重造一个contro ...
- 《转载》Java异常处理的10个最佳实践
本文转载自 ImportNew - 挖坑的张师傅 异常处理在编写健壮的 Java 应用中扮演着非常重要的角色.异常处理并不是功能性需求,它需要优雅地处理任何错误情况,比如资源不可用.非法的输入.nul ...