前方高能|protobuf介绍-下载-安装-使用
内容太难,美女镇楼(选自《灵笼》-白月魁)
一、什么是protobuf
protobuf全称Google Protocol Buffers,是google开发的一套用于数据存储、网络通信时用于协议编码/解码的工具库。protobuf是一种灵活高效的独立于语言平台的结构化数据表示方法。在通信协议和数据存储等领域中使用比较多。protobuf对于结构中的每个成员会提供set系列函数和get系列函数。与XML相比,protoBuf更小更快更简单。你可以用定义protobuf的数据结构。用protobuf编译器生成特定语言的源代码,如C++,Java,Python等。
二、protobuf的优缺点
(1)优点:
平台无关、语言无关
二进制、数据字描述
提供了完整详细的操作API
高性能比XML要快20-100倍
尺寸小比XML要小3-10倍高可扩展性
数据字描述前后兼容
(2)缺点:
语言覆盖度低,官方支持java、c++、python语言环境
自定义protobuf的工作量偏大
三、protobuf的安装
方法1、源码编译安装
官方源码:https://github.com/google/protobuf
(1) 安装依赖
如官网所列,protoc有如下依赖:Autoconf,automake,libtool,curl,make,g++,unzip,gmock。其中gmock依赖于libtool。
(2) 源码下载
git clone https://github.com/google/protobuf
(3) 源码编译
注:安装完成后会在PATH目录下生成libprotobuf、libprotobuf-lite,libproto这三类静态和动态库文件,然后我们需要手动执行Idconfig来更新lib路径。
方法2、二进制安装(墙裂推荐)
我们也可以直接下载二进制包来进行安装。
以下是获取proto二进制文件的连接:
https://github.com/protocolbuffers/protobuf/releases
(1) 下载指定版本的二进制包;
(2) 解压到指定PATH路径;
即可安装完成。
(也可以把解压后的bin文件夹下的【protoc】文件软链接到PATH路径下:)
sudo ln -s protoc的完整路径 /usr/bin/protoc
安装完后如果可以在任意路径下使用以下命令查看版本成功,才能算安装好了。
protoc --version
四、使用示例
https://developers.google.com/protocol-buffers/
安装完成后,我们可以按照官方手册上的示例编写.proto文件
(1) 编写.proto文件(本例:test.proto)
(2) 编译【test.proto】文件,生成对应语言的操作文件。
如果我们想要python的操作文件,那么执行:
protoc --python_out=./ test.proto
或者
protoc test.proto --python_out=./
以上命令执行后会对应生成【test_pb2.py】的文件。
如果我们想要c++的操作文件,那么执行:
protoc test.proto --cpp_out=./
会对应生成【test_pb2.h】、【 test_pb2.cc】文件。
(3) 序列化protobuf
将生成的操作文件引入到代码中。通过protobuf内置的set函数进行赋值,赋值完成后将protobuf序列化成二进制流。目前针对于c++语言,protobuf提供了如下序列化函数:
(4) 反序列化protobuf
将已经序列化的二进制流反序列化,同样也是调用protobuf提供的内置函数。针对于c++,protobuf提供了如下几种常用的反序列化函数:
总结
一、 protobuf时间效率和空间效率都要比json和XML都有提升,但是由于消息结构可读性不高,且支持java,c++和python,导致其使用不够广泛。
二、 protobuf主要应用于对时间效率或空间效率方面有极高要求的场景。
-以上内容,来自网络,见文末【阅读原文】。
-祭奠大周末死掉的脑细胞
-2022.04.09