写点什么

想通讯?谈钱多俗,谈 ProtoBuf

  • 2022 年 7 月 16 日
  • 本文字数:1473 字

    阅读完需:约 5 分钟

大家好,我是怀瑾握瑜,一只大数据萌新,家有两只吞金兽,嘉与嘉,上能 code 下能 teach 的全能奶爸

如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~



什么是 ProtoBuf

protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。


protobuf 对于结构中的每个成员会提供 set 系列函数和 get 系列函数。与 XML 相比,protoBuf 更小更快更简单。你可以用定义 protobuf 的数据结构。用 protobuf 编译器生成特定语言的源代码,如 C++,Java,Python 等。


ProtoBuf 的优点:


  • 平台无关、语言无关

  • 二进制、数据字描述

  • 提供了完整详细的操作 API

  • 高性能比 XML 要快 20-100 倍

  • 尺寸小比 XML 要小 3-10 倍高可扩展性

  • 数据字描述前后兼容


ProtoBuf 的缺点:


  • 语言覆盖度低,官方支持 java、c++、python 语言环境

  • 自定义 protobuf 的工作量偏大

为什么是 ProtoBuf

ProtoBuf 使用的最佳场景,就是制定协议。


只要只官方支持的语言环境,只需要制定一套协议,大家可以各自生成自己的解析工具,接收到协议后进行解析。


协议也是支持变更的,在一定情况下,也不会影响低版本的协议解析,所以一方针对某些场景进行升级时,不用通知所有的终端,只需要相应有依赖的终端进行升级即可。


ProtoBuf 的数据是用二进制存储的,本身相比 json 或者 xml 数据存储就小,如果再加上压缩,那会更加降低带宽。

如何使用 ProtoBuf

在 pom 中配置相关 jar 包


<dependency>    <groupId>com.google.protobuf</groupId>    <artifactId>protobuf-java</artifactId>    <version>3.7.1</version></dependency>
复制代码


在 build 中添加配置


<build>    <defaultGoal>package</defaultGoal>    <extensions>        <extension>            <groupId>kr.motd.maven</groupId>            <artifactId>os-maven-plugin</artifactId>            <version>1.5.0.Final</version>        </extension>    </extensions>     <plugins>        <!-- protobuf 编译组件 -->        <plugin>            <groupId>org.xolstice.maven.plugins</groupId>            <artifactId>protobuf-maven-plugin</artifactId>            <version>0.5.1</version>            <extensions>true</extensions>            <configuration>                <protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>                <protocArtifact>com.google.protobuf:protoc:3.7.1:exe:${os.detected.classifier}</protocArtifact>            </configuration>            <executions>                <execution>                    <goals>                        <goal>compile</goal>                    </goals>                </execution>            </executions>        </plugin>         <!-- 编译jar包的jdk版本 -->        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-compiler-plugin</artifactId>            <version>3.1</version>            <configuration>                <source>${java.version}</source>                <target>${java.version}</target>            </configuration>        </plugin> </plugins></build>
复制代码


将需要编译的 proto 文件放入/src/main/proto 目录下


使用命令或者使用 idea 的 Plugins 工具进行编译


mvn protobuf:compile
复制代码



结束语

如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2022.07.01 加入

还未添加个人简介

评论

发布
暂无评论
想通讯?谈钱多俗,谈ProtoBuf_protobuf_怀瑾握瑜的嘉与嘉_InfoQ写作社区