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