Protocol Buffers 在iOS的使用

51 篇文章 0 订阅

Protocol Buffers 简单的说是对结构化的数据进行序列化(Json格式、XML格式)的一种语言,但是更小、更快、更简单,更多的用于IM即时通讯这一块,有助于节省流量,提高性能。Protocol Buffers 是谷歌的,官网连接

现在我们来简单的体验下 Protocol Buffers 在 iOS 的使用。

安装使用环境,打开终端
安装 homebrew
通过 homebrew 安装其他需要的工具

brew install automake
brew install libtool
brew install protobuf

然后安装 Protocol Buffers OC需要的环境,去 GitHub 上下载,下载地址
下载完后解压得到一个文件夹,然后用 终端 进入该文件夹的目录,依次执行下面的命令

./configure
make
make check
sudo make install

安装成功的话,在 /usr/local/bin/ 目录下会有 protoc 文件
在这里插入图片描述

到此,就完成使用环境的安装。

接下来就是实际使用了:

  1. 随便新建一个文件夹,终端切换到该文件夹下,然后新建一个 Person.proto 文件
    在这里插入图片描述
    在Person.proto 文件添加以下代码,具体的语法教程可以官网学习
syntax = "proto3";

message Person {
	string name = 1;
	int32 age = 2;
	string gender = 3;
}

保存文件,然后在终端输入以下命令,把 Person.proto 文件转换为 OC 的 .h 和 .m 文件 。要在 Person.proto 文件所在目录下执行

protoc --proto_path=. --objc_out=. Person.proto

这样就得到了OC需要的代码了
在这里插入图片描述

在我们的项目里使用的话,还要安装 Protocol Buffers 的第三方库,这里我们通过 cocoapods 安装

pod 'Protobuf'

安装完,重新打开项目,然后把 Person.proto Person.pbobjc.h Person.pbobjc.m 这三个文件都拖进我们的项目。由于转换出来的文件是使用MRC的,所以我们要让 Person.pbobjc.m 支持ARC。

-fno-objc-arc

在这里插入图片描述

最后,终于到了代码环节
#import "Person.pbobjc.h"
Person *person = [[Person alloc] init];
    person.name = @"Rex";
    person.age = 18;
    person.gender = @"Male";
    
    NSData *personData = [person data];
    NSError *error = nil;
    Person *personGet = [Person parseFromData:personData error:&error];
    if (error) {
        NSLog(@"%@",error.description);
    }
    NSLog(@"%@",personGet);

在这里插入图片描述
至此,一个 Protocol Buffers 简单的在 OC 的使用就完成了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在C++中将一个Protocol Buffers消息对象序列化为BINARY,你需要按照以下步骤进行操作: 1. 定义Protocol Buffers消息对象的结构,即.proto文件。 2. 使用Protocol Buffers的编译器将.proto文件编译为C++代码。 3. 在你的代码中创建一个消息对象,并设置其字段的值。 4. 调用消息对象的序列化方法,将其转换为二进制格式。在C++中,可以使用`SerializeToString()`方法。 5. 将序列化后的二进制数据存储在文件中或通过网络传输。 下面是一个C++示例代码,展示了如何将一个Protocol Buffers消息对象序列化为BINARY: ```c++ #include <iostream> #include <fstream> #include "addressbook.pb.h" using namespace std; int main() { // 创建一个AddressBook消息对象,并设置其字段的值 tutorial::AddressBook address_book; tutorial::Person* person = address_book.add_person(); person->set_id(1234); person->set_name("Alice"); person->set_email("alice@example.com"); tutorial::Person::PhoneNumber* phone_number = person->add_phone(); phone_number->set_number("555-4321"); phone_number->set_type(tutorial::Person::HOME); // 将AddressBook消息对象序列化为二进制数据 string binary_data = address_book.SerializeAsString(); // 将二进制数据存储在文件中 ofstream outfile("address_book.bin", ios::out | ios::binary); outfile.write(binary_data.c_str(), binary_data.size()); return 0; } ``` 在这个示例中,我们首先创建了一个AddressBook消息对象,并设置了其中的一个Person对象的字段值。然后,我们调用了`SerializeToString()`方法,将AddressBook对象序列化为二进制格式。最后,我们将二进制数据存储在文件中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值