M' Blog

人生天地间,忽如远行客

Protobuf 是什么?

刚开始学习 Caffe,遇到的第一个问题就是需要阅读 caffe.proto 文件来了解 Caffe 源码的数据结构,因为 Caffe 是采用 Protobuf 来承载其基本数据结构的。经过查阅网上相关资料,现总结一下到底什么是 Protobuf,以及其使用方法。

1. 什么是 Protobuf

protobufProtocol Buffers 的简称,Protocal Buffers 是 Google 的一个开源项目。其官方解释为:

Protocol Buffers (a.k.a., protobuf) are Google’s language-neutral, platform-neutral, extensible mechanism for serializing structured data.

翻译过来就是:Protocol Buffers 为 Google 开发的一套与语言和平台无关的可扩展的序列化结构数据的机制。

说白了,其作用与 XML、JSON 等数据表示语言类似,都是产生一种不依赖于编程语言和平台的数据保存读取方式。不同之处在于,XML、JSON 为自解释型文本格式文件保存,其内容可以直接被人解读而不依赖于第三方的说明;而 Protobuf 以二进制形式进行保存,人无法直接读取,并且需要依赖第三方的说明解释文件进行数据的读写,该文件就是扩展名为 .proto 的文本文件。

Protobuf 的如下特点:

  • 二进制读写方式使其性能、效率优于文本描述方式;
  • 支持向前、向后无缝兼容;
  • 代码生成机制、数据解析类自动生成;
  • 二进制文件描述导致其可读性差,读写必须依赖 .proto 文件

2. 如何在项目中使用 Protobuf

使用 Protobuf 时,按照如下步骤进行:

  1. 在系统中安装 Protocol Compiler,即协议编译器;
  2. 编写所需的 .proto 文件,即数据结构描述文件;
  3. 使用协议编译器产生与数据结构描述文件相对应的代码文件,C++代码生成一对 .pb.h 与 .pb.cc 代码文件;
  4. 在项目中包含 .pb.h 与 .pb.cc 代码文件即可使用其提供的类进行数据的读写。

详细描述参考文章:

  1. Protocol Buffer技术详解(语言规范);
  2. Protocol Buffer技术详解(C++实例);

另附几个讲解 Protobuf 的 文章链接:

  1. Protobuf详解;
  2. Google 的开源技术protobuf 简介与例子;
  3. Google 开源技术protobuf;
  4. 图解Protobuf编码;