想通讯?谈钱多俗,谈ProtoBuf 原创
春节不停更,此文正在参加「星光计划-春节更帖活动」
大家好,我是怀瑾握瑜,一只大数据萌新,家有两只吞金兽,嘉与嘉,上能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
结束语
如果您喜欢我的文章,可以[关注⭐]+[点赞👍]+[评论📃],您的三连是我前进的动力,期待与您共同成长~