protobuf详解

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) 源码下载

(3) 源码编译

注:安装完成后会在/usr/lib目录下生成libprotobuf、libprotobuf-lite,libproto这三类静态和动态库文件。然后我们需要手动执行Idconfig来更新lib路径。

2、二进制安装

我们也可以直接下载二进制包来进行安装。

获取proto二进制文件的连接:https://github.com/protocolbuffers/protobuf/releases

(1) 下载指定版本的二进制包

(2) 解压指定PATH路径

即可安装完成。

四、使用示例

官方文档地址:https://developers.google.com/protocol-buffers/

安装完成后,我们可以按照官方手册上的示例编写.proto文件

(1) 编写.proto文件

(2) 编译.proto文件,生成对应语言的操作文件。

如果我们想要python的操作文件,那么执行:

protoc --python_out=./ test_pb.proto对应生成test_pb.py的文件。

如果我们想要c++的操作文件,那么执行:protoc --cpp_out=./ test_pb.proto

对应生成test_pb.h test_pb.cc文件

(3) 序列化protobuf

将生成的操作文件引入到代码中。通过protobuf内置的set函数进行赋值,赋值完成后将protobuf序列化成二进制流。目前针对于c++语言,protobuf提供了如下序列化函数:

(4) 反序列化protobuf

将已经序列化的二进制流反序列化,同样也是调用protobuf提供的内置函数。针对于c++,protobuf提供了如下几种常用的反序列化函数:

总结

一、 protobuf时间效率和空间效率都要比json和XML都有提升,但是由于消息结构可读性不高,且支持java,c++和python,导致其使用不够广泛。

二、 protobuf主要应用于对时间效率或空间效率方面有极高要求的场景。

本文分享自微信公众号 - 搜狗测试(SogouQA),作者:gzj

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用python可视化protobuf内容

    (2) 数据处理(如图所示,l3输出结果解析后乱码,故需要进一步处理:\n\t\r禁止转义)

    用户5521279
  • Python+fiddler模拟Protobuf数据容错

    在客户端和服务端数据传输交换中经常使用的技术是 JSON 或 XML,而小编最近在项目中接触到了一种新的数据传输框架——Protobuf,接下来我们就正式学习...

    用户5521279
  • 基于python的Json容错数据自动化输出

    测试工作中往往需要对服务端所返回的Json数据做容错,即需要确保原数据中各项值被替换成异常数据类型时,相关数据传输与处理系统不会发生报错、崩溃等问题。

    用户5521279
  • protobuf相关操作与问题

    JNingWei
  • protobuf使用简介

    环境:windows,java 1. protobuf概述 protobuf是Google开发一种数据描述格式,能够将结构化数据序列化,可用于数据存储,通...

    2Simple
  • protobuf简单介绍和ubuntu 16.04环境下安装教程

    protobuf是谷歌的开源序列化协议框架,结构类似于XML,JSON这种,显著的特点是二进制的,效率高,主要用于通信协议和数据存储等方面,算是一种结构化数据...

    砸漏
  • libatbus 的大幅优化

    最近零碎的事太多了,拖了好久没写blog。一些小的碎片话的东西也不值得写,另一方面是这次大幅优化了 atframework 的一些流程细节,特别是针对我们这两年...

    owent
  • 安利贴:如何使用protobuf

    protoBuf (PB) 我理解来说,就是一种数据结构,由google 团队开发

    腾讯IVWEB团队
  • Derek解读Bytom源码-protobuf生成比原核心代码

    Gitee地址:https://gitee.com/BytomBlockchain/bytom

    比原链Bytom
  • Derek解读Bytom源码-protobuf生成比原核心代码

    Gitee地址:https://gitee.com/BytomBlockchain/bytom

    比原链Bytom

扫码关注云+社区

领取腾讯云代金券