Google protobuf 使用及原理

什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:

简介

什么是 Google Protocol Buffer? 假如您在网上搜索,应该会得到类似这样的文字介绍:

Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准,目前已经正在使用的有超过 48,162 种报文格式定义和超过 12,183 个 .proto 文件。他们用于 RPC 系统和持续数据存储系统。

Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。

比如我们现在的使用场景,数据源相关的业务由另一个团队做,他们使用的语言是c++ ,我们项目中使用的是java语言,那么问题来了,c++的数据怎么发给我们呢,通过kafka,但是也需要有一定的标准吧,不然重复的工作量得多大啊,那就用paotobuf吧,两个团队公用一个.proto文件,这样无论是序列化还是反序列化,两边都保持一致,就这样干。

安装 Google Protocol Buffer

在网站 http://code.google.com/p/protobuf/downloads/list上可以下载 Protobuf 的源代码。然后解压编译安装便可以使用它了。

安装步骤如下所示:

1
2
3
4
5
6
tar -xzf protobuf-2.1.0.tar.gz
cd protobuf-2.1.0
./configure --prefix=$INSTALL_DIR
make
make check
make install

书写 .proto 文件

首先我们需要编写一个 proto 文件,定义我们程序中需要处理的结构化数据,在 protobuf 的术语中,结构化数据被称为 Message。proto 文件非常类似 java 或者 C 语言的数据定义。代码清单 1 显示了例子应用中的 proto 文件内容。

清单 1. proto 文件

1
2
3
4
5
6
7
package lm;
message helloworld
{
   required int32     id = 1;  // ID
   required string    str = 2;  // str
   optional int32     opt = 3;  //optional field
}

编译 .proto 文件

写好 proto 文件之后就可以用 Protobuf 编译器将该文件编译成目标语言了。本例中我们将使用 C++。

假设您的 proto 文件存放在 $SRC_DIR 下面,您也想把生成的文件放在同一个目录下,则可以使用如下命令:

1
protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto

命令将生成两个文件:

lm.helloworld.pb.h , 定义了 C++ 类的头文件

lm.helloworld.pb.cc , C++ 类的实现文件

在生成的头文件中,定义了一个 C++ 类 helloworld,后面的 Writer 和 Reader 将使用这个类来对消息进行操作。诸如对消息的成员进行赋值,将消息序列化等等都有相应的方法。

可以根据项目语言自己选择生成各类型的pojo对象,c++使用c++的工具生成相应的对应在项目中使用,java则使用java相关的工具生成相应的class文件,就可以使用了,序列化和反序列化就不在这讲了



  • 发表于 2018-07-29 12:02
  • 阅读 ( 169 )
  • 分类:大数据

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
张鹏

大数据工程师

94 篇文章

作家榜 »

  1. 张鹏 94 文章
  2. 0 文章
  3. 赵科 0 文章
  4. 王孖珺397954227 0 文章