简单介绍 protocol buffer

protocol buffer

protocol buffer 是谷歌的一款序列化结构数据的工具. 它有几个核心的概念:

  • .proto文件: 定义protocol buffer message 类型的地方,这个类型指定了如何序列化你的结构数据,如下所示, 这个.proto文件定义了一个Person 结构数据(也可以看作类/结构体).
message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;
  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }
  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }
  repeated PhoneNumber phone = 4;
}
  • protoc工具: protocol buffer compiler,用于编译.proto 文件,编译完之后,会出现两个文件 **.pb.h**.pb.cc , 这两个文件中就包含了刚才我们在.proto中定义的结构数据, 在生成的文件中以 的形式体现, 同时也存在 序列化和解析 这个结构数据的方法.
//生成文件中的一小部分
class Person : public ::google::protobuf::Message {
 public:
  Person();
  virtual ~Person();
  Person(const Person& from);
  • c++ 代码中 包含这个头文件就可以创建这个类的对象了, 创建了对象之后,我们可以把这个对象序列化, 保存到 .pb 文件中, 我们也可以从.pb文件中来还原之前序列化的对象.
  • 序列化的时候,有两种方式, 可以序列化成 .pbtxt(用这个后缀表示是txt文件,防止混淆),这是一个文本文件,人类可读,但是占用空间大. 也可以序列化成 pb(用这个表示二进制文件)文件, 这个是二进制文件,人类不可读,但是占用空间小,传输方便.

参考资料

https://developers.google.com/protocol-buffers/docs/cpptutorial

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏生信技能树

linux命令行文本操作一文就够

主要是 awk/grep/sed这三驾马车,加上vi这个神器,最后辅助一些小工具,包括 wc,cat,diff,join,paste,cut,uniq 这里 简...

3419
来自专栏我和PYTHON有个约会

20. 企业级开发基础1:自定义模块

之前的课程中,我们已经了解了python程序设计开发的基础部分内容 包含了数据类型、变量、运算符、程序选择结构、循环结构、函数处理、字符串处理等等内容。 本...

723
来自专栏转载gongluck的CSDN博客

ANSI, UNICODE,UTF8编码的区别

本地化过程中涉及到源文件和目标文件的传输问题,这时候编码就显得很重要。中文的网页和操作系统中通常采用ANSI编码,这也是微软OS的一个字符标准。对于ANSI,...

2756
来自专栏林德熙的博客

C# 使用外部别名

在看过 C# 很少人知道的科技的小伙伴就知道,我告诉了大家一些关键字,都是很少人发现。

521
来自专栏个人随笔

房上的猫:JavaDoc注释

//这是一个注释 /*   *这是一个演示程序   */ /**    *@这是JavaDoc注释。   */ JavaDoc注释    背景:       j...

34910
来自专栏逆向技术

学习逆向知识之用于游戏外挂的实现.第二讲,快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别

              通过游戏外挂,学习逆向技术之快速寻找植物大战僵尸阳光基址.以及动态基址跟静态基址的区别

850
来自专栏张戈的专栏

Linux运维基础技能: 脚本编程与Linux命令

本系列文章一共三篇,分别为《脚本编程与 Linux 命令》、《接入层与网络基础》和《 MySQL 与 SQL 优化》,由腾讯高级工程师 luaruan(阮永顺)...

981
来自专栏章鱼的慢慢技术路

程序员算法时间空间复杂度速查表

1295
来自专栏程序员互动联盟

【问题追踪】scanf引发的“血案”

最近我遇到C语言学习中一个比较容易让我们这种新手犯错或者忽略的地方。那就是关于scanf函数在读取字符时的问题,以及getchar()与回车的一点恩恩怨怨,换句...

2726
来自专栏Netkiller

Solidity 智能合约开发语言·数据类型

中国广东省深圳市龙华新区民治街道溪山美地 518131 +86 13113668890 <netkiller@msn.com>

66910

扫码关注云+社区