Protobuf做为一种轻量、高效、可扩展的数据存储语言,被普遍应用于数据传输中。目前对于Proto编辑及编译,最传统的方法是先基于文本编辑软件撰写proto文件,再经过Google提供的protoc程序以命令行的形式编译成java类文件,最后再将生成的java类文件移至project的相应位置。传统的方法比较麻烦,本文将基于IDEA讲述一种一站式编辑及编译的方法。java
一、下载protoc解析器:protobuf-java-3.14.0.zip
二、在IDEA中安装插件。包括GenProtobuf和Protocol Buffer Editor,前者用于一键转换proto文件,后者用于编辑proto文件(未安装前,IDEA不支持对proto语法,没有高亮显示和自动补全提示)。git
注意:若是没有在IDEA的插件市场中搜到以上两个插件,多是IDEA的版本低了,所以须要升级IDEA到2020版。
一、配置Maven
pom.xml文件中添加以下依赖包:github
<dependencies> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.9.1</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java-util</artifactId> <version>3.9.1</version> </dependency> </dependencies>
二、配置GenProtobuf
IDEA菜单栏 --> Tools --> Configure GenProtobuf --> 配置地址segmentfault
一、编辑proto
安装好Protocol Buffer Editor插件后,无需配置便可使用,由图可见,proto语法的关键字高亮显示了,便于编辑。测试
二、编译proto
右键proto文件,能够看见两个跟proto有关的选项,一个是“quick gen protobuf here”,另外一个是“quick gen protobuf rules”。前者表示在proto所在的文件路径下生成java文件,后者表示按配置的地址生成java文件。ui
前文已经配置好了java生成的路径,咱们选择后者生成便可,效果如图:
其中,MyTest即为test.proto生成的java类。google
生成了java类文件后,咱们就能够测试其序列化和反序列化功能,若是能够正常运行并解析正确,说明咱们的操做无误。spa
测试代码:插件
package learnProto.selfTest; import com.google.protobuf.InvalidProtocolBufferException; import learnProto.selfTest.MyTest.*; import java.util.Arrays; public class Test { public static void main(String[] args) { convertProto(1); } public static void convertProto(int value) { //1.经过build建立消息构造器 Data.Builder dataBuilder = Data.newBuilder(); //2.设置字段值 dataBuilder.setInt32(value); //3.经过消息构造器构造消息对象 Data data = dataBuilder.build(); //4.序列化 byte[] bytes = data.toByteArray(); System.out.println(value+"序列化后的数据:" + Arrays.toString(bytes)+",字节个数:"+bytes.length); //5.反序列化 try { Data parseFrom = Data.parseFrom(bytes); System.out.println("还原后的数据="+parseFrom.getInt32()); } catch (InvalidProtocolBufferException e) { e.printStackTrace(); } } }
运行结果:命令行
1序列化后的数据:[24, 1],字节个数:2 还原后的数据=1