Protobuf学习笔记

Protobuf简介

Protobuf是谷歌开源的一个序列化框架,支持跨语言,高性能等特性,在用于网络传输进行序列化的场景下使用广泛。

它具有以下优点:

  • 性能好,效率高
  • 代码生成机制,数据解析类自动生成
  • 支持向后兼容和向前兼容
  • 支持多种编程语言(java,c++,python)

这里学习的基于proto3版本,与proto2有稍许区别。

Protobuf编译

学习Protobuf需要下载两个文件:

  1. protoc:用于将.proto反序列成对应的代码文件,这个可以直接从GitHub上下载。
  2. 类库:这里使用java类库,也可以从Github上下载,但是下载的是源码,需要编译。

下载地址

Github地址

类库编译

本次编译是在Mac OS上进行的,在Windows上类似。

  • 安装Maven,在Mac OS上直接使用HomeBrew进行安装,安装命令如下:
brew install maven
  • 解压protoc-3.5.1-osx-x86_64.zipprotobuf-java-3.5.1.zip压缩包,得到对应的文件目录;
  • 重要:将protoc文件拷贝到protobuf目录的src目录下。假设现在在protoc-3.5.1-osx-x86_64目录下,执行如下命令:
cp ./bin/protoc ../protobuf-3.5.1/src
  • 进入protobuf-3.5.1/java目录下,执行命令
mvn install 
mvn package
  • 编译打包完成后,分别在core/targetutil/target目录下得到两个jar包。

开始使用

定义一个消息类型

先定义一个简单的消息类型,假设你想定义一个“搜索请求”的消息格式,每一个请求含有一个查询字符串、你感兴趣的查询结果所在的页数,以及每一页多少条查询结果。可以采用如下的方式来定义消息类型的.proto文件了:

syntax = "proto3";

message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 result_per_page = 3;
}
  • 第一行通过定义syntax表明是使用的proto3语法,如果想使用proto2语法,就改成proto2;
  • SearchRequest消息格式有3个字段,在消息中承载的数据分别对应于每一个字段。其中每个字段都有一个名字和一种类型。
指定字段类型

在上面的例子中,所有字段都是标量类型:两个整型(page_number和result_per_page),一个string类型(query)。当然,你也可以为字段指定其他的合成类型,包括枚举(enumerations)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值