简单介绍 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 条评论
登录 后参与评论

相关文章

来自专栏C/C++基础

getopt()、getopt_long()与getopt_long_only()获取命令行参数

众所周知,C/C++程序的主函数有两个参数。第一个参数是整型,可以获得包括程序名字的参数个数,第二个参数是字符数组指针或字符指针的指针,可以按顺序获得命令行上各...

814
来自专栏专注 Java 基础分享

深入理解Struts2----数据校验

     在表现层的数据处理方面主要分为两种类型,一种是类型转换,这点我们上篇已经简单介绍过,另外一种则是我们本篇文章将要介绍的:数据校验。对于我们的web应用...

2047
来自专栏黑白安全

SSRF中的绕过姿势

[sourcecode language="plain"] share wap url link src source target u 3g display ...

886
来自专栏蓝天

有关snprintf返回值

有关snprintf返回值更多信息,请参考:http://bbs.hadoopor.com/thread-1185-1-1.html

521
来自专栏前端小叙

Vue生命周期

这是Vue文档里关于实例生命周期的解释图 那么下面我们来进行测试一下 <section id="app-8"> {{data}} </section> ...

3285
来自专栏cs

c++那些事儿7.0 I/O流,文件操作

知识点综述: ---- C++ I/O: 在iostream头文件中定义 istream //通用输入流和其它输入流基类。 ...

3277
来自专栏C/C++基础

Shell特殊字符

shell既是类Unix操作系统的命令解析器,用于解释执行用户输入的一连串命令,它类似于DOS下的command和后来Windows的cmd.exe。同时she...

661
来自专栏Java帮帮-微信公众号-技术文章全总结

stuts2返回json数据简单实现

stuts2返回json数据简单实现 整理了下struts2的简单demo,完成JSON数据的展示。基本流程是在Action定义一个对象属性,例如map类型的一...

3597
来自专栏编程

理解PHP中的stdClass类

相信大家跟我一样,会经常看到和下面很类似的PHP代码: 复制代码 $user = new stdClass(); $user->name = 'gouki'; ...

1709
来自专栏积累沉淀

Python快速学习第十天

11.1 打开文件 open函数用来打开文件,语法如下: open(name[, mode[, buffering]]) open函数使用一个文件名作为唯...

1766

扫码关注云+社区