想通讯?谈钱多俗,谈ProtoBuf 原创

怀瑾握瑜的嘉与嘉
发布于 2022-1-25 22:10
浏览
0收藏

春节不停更,此文正在参加「星光计划-春节更帖活动

大家好,我是怀瑾握瑜,一只大数据萌新,家有两只吞金兽,嘉与嘉,上能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

结束语

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

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
收藏
回复
举报
回复
    相关推荐