Protocbuf使用和安装

2023-11-06

Protocol buffersmxl一样在序列化数据结构时很灵活、高效和智能,但是它的优势在于定义文件更小,读取速度更快,使用更加简单。目前protocol buffers支持C++javapython三种语言并且独立于平台。

linux环境安装

下载protobuf-2.5.0.tar.gz

tar -xvf protobuf-2.5.0.tar.gz

./configure --prefix=/usr/local/protobuf-2.5.0

make

make install

安装成功后可将编译程序链接到系统bin目录下,以免每次使用都加绝对路径

ln -s /usr/local/protobuf-2.5.0/bin/protoc /usr/bin/protoc

linux安装完成!

 

使用步骤:

新建*.proto文件,并调用命令:protoc --cpp_out= *.proto编译即可生成C++.hcpp文件。

 

windows环境安装

下载 protobuf-2.5.0.zip

解压后使用VS打开vsprojects目录下的工程,编译生成protoc.exelibprotobuf.lib,将protoc.exe放到windows目录下。

新建测试工程,链接libprotobuf.lib文件。新建test.proto文件,并在cmd控制台下输入命令即可生成头文件和源文件:

C:\Users\Administrator> protoc.exe -I=e:\protocbuf\include --cpp_out=e:\protocbuf\include\ e:\protocbuf\include\test.proto

 

 

protocbuf 语法

定义示例

option optimize_for = SPEED;

enum UserType

{

    ORDINERY_USER = 0;    //普通用户

    VIP_USER = 1;         //vip用户

}

 

message UserList

{

        repeated User                     users                   = 1;

}

 

message User

{

        required int32                    uid                    = 1;

        optional int64                    guid                   = 2;

        optional byte                     nick                     = 3;

        optional string                   account                = 4;

        optional UserType               type                  = 5[default=1];

}

 

protocbuf 使用message表示数据结构,类似c语言中的struct。

 

优化级别介绍 

Protocol Buffer定义三种优化级别SPEED/CODE_SIZE/LITE_RUNTIME。缺省情况下是SPEED。

    option optimize_for = SPEED;
    SPEED: 表示生成的代码运行效率高,但是由此生成的代码编译后会占用更多的空间。

    CODE_SIZE: 和SPEED恰恰相反,代码运行效率较低,但是由此生成的代码编译后会占用更少的空间,通常用于资源有限的平台,如Mobile。
    LITE_RUNTIME: 生成的代码执行效率高,同时生成代码编译后的所占用的空间也是非常少。这是以牺牲Protocol Buffer提供的反射功能为代价的。

 

编译介绍

protoc --proto_path=IMPORT_PATH --cpp_out=DST_DIR --java_out=DST_DIR --python_out=DST_DIR path/to/file.prot

 

 

升级原则

    在实际的开发中会存在这样一种应用场景,既消息格式因为某些需求的变化而不得不进行必要的升级,但是有些使用原有消息格式的应用程序暂时又不能被立刻升级,这便要求我们在升级消息格式时要遵守一定的规则,从而可以保证基于新老消息格式的新老程序同时运行。规则如下:
1. 不要修改已经存在字段的标签号。
2. 任何新添加的字段必须是optional和repeated限定符,否则无法保证新老程序在互相传递消息时的消息兼容性。
3. 在原有的消息中,不能移除已经存在的required字段,optional和repeated类型的字段可以被移除,但是他们之前使用的标签号必须被保留,不能被新的字段重用。
4. int32、uint32、int64、uint64和bool等类型之间是兼容的,sint32和sint64是兼容的,string和bytes是兼容的,fixed32和sfixed32,以及fixed64和sfixed64之间是兼容的,这意味着如果想修改原有字段的类型时,为了保证兼容性,只能将其修改为与其原有类型兼容的类型,否则就将打破新老消息格式的兼容性。
5. optional和repeated限定符也是相互兼容的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Protocbuf使用和安装 的相关文章

随机推荐

  • 可以说说猿如意的基本功能以及作用是什么啊?

    猿如意是一款软件工具 它的基本功能是帮助用户编写 调试和执行 Python 代码 它可以作为一个集成开发环境 Integrated Development Environment IDE 来使用 也可以作为一个单独的代码编辑器使用 猿如意提
  • LaTeX - 设置中文字体

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 第一步 字体从电脑导出 Window R输入cmd回车 输入fc list f family n lang zh gt d zhfont txt 回车 enter键 可以用
  • 高斯噪声

    高斯噪声 图像噪声之高斯噪声 gauss noise 概述 高斯噪声是指它的概率密度函数服从高斯分布 即正态分布 的一类噪声 与椒盐噪声相似 Salt And Pepper Noise 高斯噪声 gauss noise 也是数字图像的一个常
  • 【正点原子MP157连载】第五章 ATK-STM32MP157文件系统简介-摘自【正点原子】STM32MP157快速体验

    第五章 ATK STM32MP157文件系统简介 5 1 文件系统目录简介 5 2 文件系统Qt版本 5 3 如何创建systemd 自启动服务 5 4 如何禁用Qt界面启动 1 实验平台 正点原子STM32MP157开发板 2 购买链接
  • 红帽文件系统满了服务器启动不了,红帽系统盘问题汇总解答.doc

    红帽系统盘问题汇总解答 PAGE PAGE 1 作者 日期 PAGE NUMPAGES 做题盘问题汇总 备注 必须64位的机子 问题1 视频里的那个开始的脚本 O号0根不分不清 答 没有零都是大写的O 问题2 那我打了零 CSR证书可能要重
  • eclipse下新建maven web工程(是web工程!)以及部署maven web工程到tomcat服务器

    一 eclipse新建maven web工程 1 在菜单栏File gt New下面找到Maven Project 2 勾选上Create a simple project 不使用骨架 Next 3 填写工程名称和包名 并选择war类型 一
  • 支持向量机SVM的学习

    20201102 0 引言 支持向量机作为一种常用的机器学习算法 应用非常广泛 原始的SVM只能支持线性数据 而通过核函数的方式 可以使其应用于非线性数据 之前学习过SVM的具体过程 也在sklearn中进行过调优 但是都没有记录 而且上次
  • 4.2 计算机体系结构——存储层次结构——cache工作原理

    cache是小容量 高速缓冲存储器 由SRAM组成 速度几乎和CPU一样快 一般将cache和主存的存储空间都划分为若干大小相同的块 1 cache工作原理 根据时间局部性和空间局部性 当处理器访问一块数据时 它很可能再次访问这块数据或者访
  • 【Spring AOP】Spring AOP快速使用

    文章目录 前言 1 相关注解 类注解 方法注解 2 execution 表达式 例一 execution 表达式 的限制使用 例二 execution 表达式 的通配使用 3 相关pom依赖 4 案例 创建接口 Aop使用 方式一 Befo
  • struts2中各个jar包作用

    Struts2 3 4 所需的Jar包及介绍 Jar包的分类 jar包名称 jar包版本 jar包 文件名 jar包 的作用 jar包内包含的主要包路径及主要类 依赖的自有jar包名称 依赖的第三方jar包名称 本jar包是否为第三方包 S
  • Hash算法特点

    2 2 Hash算法有什么特点 一个优秀的 hash 算法 将能实现 正向快速 给定明文和 hash 算法 在有限时间和有限资源内能计算出 hash 值 逆向困难 给定 若干 hash 值 在有限时间内很难 基本不可能 逆推出明文 输入敏感
  • 第十届蓝桥杯省赛C++B组 等差数列

    数学老师给小明出了一道等差数列求和的题目 但是粗心的小明忘记了一部分的数列 只记得其中 N 个整数 现在给出这 N 个整数 小明想知道包含这 N 个整数的最短的等差数列有几项 输入格式 输入的第一行包含一个整数 N 第二行包含 N 个整数
  • 理解TCP/IP、HTTP、FTP、 NTP、 SNMP、VRRP等常用协议(FTP)

    FTP 概述 文件传输协议 FTP 作为网络共享文件的传输协议 在网络应用软件中具有广泛的应用 FTP的目标是提高文件的共享性和可靠高效地传送数据 在传输文件时 FTP 客户端程序先与服务器建立连接 然后向服务器发送命令 服务器收到命令后给
  • redis常用命令

    一 key 相关 1 redis允许模糊查询 key keys 有3个通配符 2 randomkey 返回随机key 3 type key 返回key存储的类型 4 exists key 判断某个key是否存在 5 del key 删除ke
  • 【颜值检测神器】来,请拿出你们的绝活(这颜值,对得起观众么?)

    前言 作者 程序员梨子 文章简介 本篇文章主要调用百度接口制作一款颜值检测小工具啦 文章源码获取 为了感谢每一个关注我的小可爱 每篇文章的项目源码都是无偿分 享滴 点这里蓝色这行字体自取 需要什么源码记得说标题名字哈 私信我也可 欢迎小伙伴
  • 9.全志H3-修改DDR的速度

    上面是我的微信和QQ群 欢迎新朋友的加入 前一篇文章 为了测试我自己画的板子 查了下关于uboot源码 降低DDR的速度 我使用的是友善之臂提供的源码 不多说其他的了 在源码里面 查找下图的文件 打开文件 修改图示内容就行 下面是启动的打印
  • 【java】兴唐第二十三节课作业

    已知如下 下表为某班级四次考试成绩单 要求使用HashMap
  • 万网域名如何设置显性url转发和隐性URL转发

    原文链接 http www enkj com idcnews Article 20161025 9580 URL转发技术就是将该域名的网站访问请求 通过浏览器端技术 转向到另外一个网站 如果跳转后 浏览器地址栏还是该域名 称为隐性URL转发
  • 眼底图像血管分割数据集_一个图像分割任务的Hello World项目(UNet+眼底血管分割)...

    庖丁解牛式的学习 才是真正的事半功倍 这是CVHub公众号的第七篇原创文章 也是 学术小白也能看懂的学术进阶专栏 计算机视觉方向 的第七篇文章 导读 在基于深度学习的医学影像分割任务中 基本在哪都能看到 U Net 的影子 这是一篇发表于
  • Protocbuf使用和安装

    Protocol buffers和mxl一样在序列化数据结构时很灵活 高效和智能 但是它的优势在于定义文件更小 读取速度更快 使用更加简单 目前protocol buffers支持C java和python三种语言并且独立于平台 linux