JAVA 調用 com.google.protobuf


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();
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM