protobuf3 iOS 接入 protobuf

protobuf是一种可扩展的数据格式.它不依赖语言,平台.相比xml格式,它更小,更快,更简单.这种语言目前支持了java,php,c++等多种语言,可以根据官网教程使用该数据格式.本文主要讲述object-c的接入.这是最近官方支持的语言,以前更多的是使用c++或者第三方的库导入object-c项目中使用.本文会对object-c的使用做简单介绍,后面的文章会有一些分析.

1.引入官方基础pod

谷歌将protobuf需要使用的基础类封装成了一个pod,因此可以直接安装该pod,不必再手工导入.
如下:
pod "Protobuf", :git => "https://github.com/google/protobuf.git"
之所以设置git路径,是因为这样pod ‘Protobuf’, ‘~> 3.1.0’一直没有下载下来,所以直接使用了官网路径.

2.下载生成代码工具

a.安装protoc: brew install –devel protobuf 如果出现了下面的版本号,说明安装成功 ➜ ~ protoc --version libprotoc 3.0.0 关于protoc工具的使用请参考 https://developers.google.com/protocol-buffers/docs/proto3

b.另外一个方法是直接从github下载,自己编译一个protoc 链接:https://github.com/google/protobuf/tree/master/objectivec.编译完成后,
在protobuf/src下可以找到该工具

3.定义数据模型

syntax = "proto3";
package tutorial;
message SearchResponse {
  repeated Result results = 1;
}

message Result {
  string url = 1;
  string title = 2;
  repeated string snippets = 3;
}

将以上数据保存到Test.proto的文件中.

生成代码的命令为:
protoc –objc_out=tmp Test.proto
最后一个参数是定义的数据模型,生成的代码会写入objc_out对应的文件夹内.注意是两个短横杠

4.简单使用

  1. 直接将生成的代码拖入1创建的项目中,
  2. import相关头文件
  3. protobuf为了性能考虑,创建的都是mrc文件,因此在build phrases ->Compile
    sources中给拖入的文件添加 -fno-objc-arc的标志
   Result *res = [[Result alloc] init];
    res.title = @"11";
    NSLog(@"%@",res.description);

    //序列化
    NSData *data = [res data];

    //反序列化
    NSError *error;
    Result *res1 = [[Result alloc] initWithData:data error:&error];
    NSLog(@"%@",res1.description);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++ protobuf3 是 Google 开发的一种高效的序列化框架,可以将结构化数据序列化为二进制格式,以便于在网络传输或磁盘存储中使用。它的主要特点是高效、可扩展、跨平台,并且支持多种语言的互操作性。使用 protobuf3,可以轻松地在不同的编程语言和操作系统之间传递数据。 在使用 protobuf3 时,需要先定义一个 .proto 文件来描述数据结构和消息格式。然后使用 protobuf 编译器将 .proto 文件编译成对应编程语言的源代码文件,例如 C++。在 C++ 中,可以使用 protobuf3 库提供的 API 来进行序列化和反序列化操作,从而实现数据的传输和存储。 以下是一个简单的示例,展示如何使用 protobuf3 在 C++ 中进行序列化和反序列化操作: ``` // 定义 .proto 文件 message MyMessage { int32 id = 1; string name = 2; } // 使用 protobuf 编译器生成 C++ 代码 protoc --cpp_out=. my_message.proto // 在 C++ 中使用 protobuf3 序列化和反序列化数据 MyMessage message; message.set_id(1); message.set_name("Hello World!"); // 序列化为二进制格式 std::string serialized_data; message.SerializeToString(&serialized_data); // 反序列化为原始数据 MyMessage new_message; new_message.ParseFromString(serialized_data); ``` 以上代码演示了如何使用 protobuf3 在 C++ 中进行序列化和反序列化操作。可以看出,使用 protobuf3 可以方便地实现数据的传输和存储,同时也提高了性能和效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值