1、pom.xml引入依賴
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>3.17.3</version> </dependency> <dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java-util</artifactId> <version>3.17.3</version> </dependency>
2、到 https://github.com/protocolbuffers/protobuf/releases/tag/v3.17.3 下載相應版本的"protoc.exe" ,在 protoc-3.17.3-win64.zip 壓縮包里;
3、創建 .proto 文件StockInfoReply.proto,內容示例:
syntax = "proto3"; option java_package = "com.xrh.pb"; option java_outer_classname = "StockInfoReplyModel"; message StockInfoReply { string Symbol = 1; string Symbol_Name = 2; string PinYin_Name = 3; string Full_Name = 4; string Eng_Name = 5; string Exchange= 6; string CurrencyType = 7; string Industry = 8; string Regional = 9; string SymbolType = 10; string Concept = 11; string Market = 12; string ListStatus = 13; }
4、DOS文件定位到 protoc.exe 所在目錄,執行生成JAVA文件命令:
protoc.exe --java_out=D:\project\xrh_springboot\src\main\java StockInfoReply.proto
5、文件目錄結構如下:
6、測試MyTest.java代碼:
package com.xrh.pb; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; public class MyTest { public static void main(String[] args) { // 按照定義的數據結構,創建一個Person StockInfoReplyModel.StockInfoReply.Builder personBuilder = StockInfoReplyModel.StockInfoReply.newBuilder(); personBuilder.setSymbol("00001"); personBuilder.setSymbolName("上證指數"); StockInfoReplyModel.StockInfoReply xxg = personBuilder.build(); // 將數據寫到輸出流,如網絡輸出流,這里就用ByteArrayOutputStream來代替 ByteArrayOutputStream output = new ByteArrayOutputStream(); try { xxg.writeTo(output); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // -------------- 分割線:上面是發送方,將數據序列化后發送 --------------- byte[] byteArray = output.toByteArray(); // -------------- 分割線:下面是接收方,將數據接收后反序列化 --------------- // 接收到流並讀取,如網絡輸入流,這里用ByteArrayInputStream來代替 ByteArrayInputStream input = new ByteArrayInputStream(byteArray); // 反序列化 StockInfoReplyModel.StockInfoReply xxg2; try { xxg2 = StockInfoReplyModel.StockInfoReply.parseFrom(input); System.out.println("Symbol:" + xxg2.getSymbol()); System.out.println("SymbolName:" + xxg2.getSymbolName()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }