天天看點

spring-boot整合protobuf

簡介:

protobuf是Google的語言中立,平台中立,可擴充的機制,用于序列化結構化資料 - 想想XML,但更小,更快,更簡單。您可以定義資料的結構化結構,然後使用特殊生成的源代碼輕松地将結構化資料寫入和讀取各種資料流,并使用各種語言。

1.在項目中導入依賴

<dependency>
        <groupId>com.google.protobuf</groupId>
      <artifactId>protobuf-java</artifactId>
      <version>3.8.0</version>
</dependency>           

2.建立ReturnVO. proto檔案

syntax = "proto3";        // PB協定版本
message ReturnVO{
    string code = 1;             // 支付相關的字段資訊
      string message = 2;          // optional 為可選參數
      string data = 3;          // required為必填參數
 }           

3.使用idea進行生成Java檔案ReturnVOProto.java

idea實作protobuf的.proto檔案編譯成.java檔案教程

4.使用protobuf

@Test
    public void contextLoads() {
        System.out.println("===== 建構一個returnVO模型開始 =====");
        ReturnVOProto.ReturnVO.Builder builder = ReturnVOProto.ReturnVO.newBuilder();
        builder.setCode("200");
        builder.setData("OK");
        builder.setMessage("GO");


        ReturnVOProto.ReturnVO returnVO = builder.build();
        System.out.println(returnVO.toString());
        System.out.println("===== 建構returnVO模型結束 =====");

        System.out.println("===== returnVO Byte 開始=====");
        for(byte b : returnVO.toByteArray()){
            System.out.print(b);
        }
        System.out.println("\n" + "returnVO" + returnVO.toByteString().size());
        System.out.println("===== returnVO Byte 結束 =====");

        System.out.println("===== returnVO 反序列化生成對象開始 =====");
        ReturnVOProto.ReturnVO returnVO1 = null;
        try {
            returnVO1 =ReturnVOProto.ReturnVO.parseFrom(returnVO.toByteArray());
        } catch (InvalidProtocolBufferException e) {
            e.printStackTrace();
        }
        System.out.print(returnVO1.toString());
        System.out.println("===== returnVO 反序列化生成對象結束 =====");

    }           

5.結果

===== 建構一個returnVO模型開始 =====
code: "200"
message: "GO"
data: "OK"

===== 建構returnVO模型結束 =====
===== returnVO Byte 開始=====
10350484818271792627975
returnVO13
===== returnVO Byte 結束 =====
===== returnVO 反序列化生成對象開始 =====
code: "200"
message: "GO"
data: "OK"
===== returnVO 反序列化生成對象結束 =====           

繼續閱讀