Google Protocol Buffer的基本配置与使用

本文介绍了Google Protocol Buffers(PB)的用途,它是一种高效的数据序列化和反序列化工具,比XML更小、更快、更简单。文章详细阐述了如何安装PB的代码生成工具,创建并编译.proto文件,以及在项目中使用PB进行序列化和反序列化操作。作者还分享了在安装过程中可能遇到的问题,并提供了GitHub上的PB Demo项目链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    前段时间需要做紧凑排列的二进制数据的序列化与反序列化,老大让我研究谷歌的pb,尝试使用pb来做这些,说相对而言耦和性比较小,然后我就研究了下这个东西。

    1.首先要知道pb具体是什么

     Protocol buffers是一个灵活的,高效的,有自动机制(可能指编解码)工具用于序列化结构数据。类似XML,但是更小、更快、更简单。你定义你的结构化数据,然后就可以使用工具生成的你需要的语言的代码,从各种数据流中读写你的结构化数据。如果还是有不明白的就自己去谷歌了。(我简单的理解,是将规定形式排列的二进制数据进行序列化和反序列化工具)

    2.安装代码生成工具

    2.1 首先下载源代码:https://github.com/google/protobuf

    2.2 编译重要的代码生成工具

使用 HomeBrew 安装:

  • $ brew install autoconf
  • $ brew install automake
  • $ brew installlib tool

然后运行脚本
$ ./autogen.sh
$ ./configure
$ make
# 如果希望安装protoc,执行下面的命令
$ make install

3.将源代码中的oc的文件打包成一个静态库或者frmework放进项目中使用,也可以直接将这个文件夹objectivec文件夹下的所有的.h文件和.m文件,除了GPBProtocolBuffers.m拖到项目中使用。
3.1设置header search paths
targets--->build settings ---->header search paths设置 $(SRCROOT)/ objectives
3.2 pb考虑性能没有使用arc,所以要将框架中的.m文件都设置为非arc的。
targets--->build phases ------>compile  source中的.m设置为-fno-objc-arc.

4.PB 的使用

如果上面编译没有错误,下面就可以正式的使用pb了。具体使用如下

4.1 新建文件夹和.proto文件。

4.1.1新建文件夹如下



gen文件夹主要装生成的目标文件

protocols文件夹主要装.proto文件

4.1.2 .proto文件的具体格式。

在.proto文件里首先确定文件的格式版本,总共有两个版本。proto3比proto2要更新,两者有稍微区别,具体两个版本的文件格式建议参照官网:https://developers.google.com/protocol-buffers/docs/proto


4.2 .使用PB编译器编译.proto文件

  在终端输入protoc --proto_path=... --objc_out=... XXX.proto

  --proto_path对应的是.proto文件文件夹(protocols文件夹)的路径。

  --objc_out是生成模型文件夹(gen)路径。

  XXX.proto是.proto路径。

  执行命令会在gen文件夹下生成模型文件,将文件添加到项目中,并将.mComplier Flags设为-fno-objc-arc。(protobuf基于性能原因没有使用ARC) 



4.3.在项目中使用PB完成序列化&反序列化


示例如下:


// 创建对象

Person *person = [Person new];

person.name = @"TanHao";

person.uid = 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);




由于写这个文章时我已经做完这个有段时间了,其实在开始安装代码生成工具时在终端遇到不少问题,建议大家在官方推荐的地址下载最新的pb然后在进行配置,有问题欢迎留言交流。我的两个pb的demo,一个大成framework了,一个直接使用的,打成framework的已经上传,地址如下:https://github.com/Jing2684/ProtocolBuffersDemo


    











   


     


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值