protobuf 环境搭建和使用过程。

1.为什么要用protobuf?

       protobuf 是 google 推出的平台无关、语言无关、可扩展的结构化数据序列化机制,为不同平台间的通讯数据解析,提供了简单高效的方法。支持所有常见语言(C/C++、Java、Python、OC、C#、JS、Ruby、Go、PHP、Dart)。不同于json、xml这种可读性强的数据格式,protobuf格式的数据是二进制格式无可读性,需要进行解包后才有可读性。但是protobuf的优点是紧凑简洁,占用非常少的存储空间,因此非常适合通讯传输。有了protobuf就不用担心不同平台或不同编程语言间,对于数据处理的差异。

2.怎么用protobuf?

       protobuf顾名思义是protocol buffer(协议缓冲)的意思了,这个协议以 “.proto” 文件的形式定义,这个文件就是对协议的描述,也是作为不同平台、不同语言间的一个通讯媒介。假如是Java和C++之间使用protobuf协议,首先定义一个 “message.proto”的协议文件,接下来,java需要将这个message.proto转换成java可以调用的接口,C++需要将message.proto转换为C++解压调用的接口。这样对于同一组数据,Java和C++就都能用各自的接口正确解析了。那通过什么来转换message.proto呢?目前windows、linux、macos平台都有各自的转换方法。下面以linux平台为例做介绍。

3.搭建protobuf环境

搭建平台:Ubuntu18.04

1)安装protobuf依赖的库或工具

$ sudo apt-get install autoconf automake libtool curl make g++ unzip

2)下载protobuf源码

        下载途径1:通过链接下载压缩包 : protobuf源码及编译好的工具,可根据自己的需要安装所需语言的,也可所有语言全部安装。

       下载途径2: “git clone”一份源码

    git clone https://github.com/protocolbuffers/protobuf.git
    cd protobuf
    git submodule update --init --recursive
    ./autogen.sh

3)安装

     ./configure --prefix=/usr # ./configure 简单粗暴直接放到 /usr 目录防止系统找不到
     make # 过程比较慢
     make check
     sudo make install # 过程比较慢
     sudo ldconfig # refresh shared library cache.

4)验证安装是否成功

protoc --version

libprotoc 3.11.1

4.简单的使用例子

1)创建一个 .proto 文件

syntax = "proto3";

package tutorial;

option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";

message Person {
    string name = 1;
    int32 id = 2;
    string email = 3;
}

message AddressBook {
    repeated Person people = 1;
    int32 id = 2;
}

2)编译 .proto 文件

protoc -I=$SRC_DIR --java_out=$DST_DIR $SRC_DIR/message.proto

        编译完后,即可生成 "message.proto" 对应的 java 类文件,这样就可以在java环境解析protobuf格式的数据了。

其他语言只需要替换 上面命令中的 “--java_out”即可,如下:

看到这里,似乎发现并没有支持C语言,这是因为C语言还需要在此文章的基础上安装“protobuf-c”才能使用,详情见下一章。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值