歡迎光臨
每天分享高質量文章

用 Maven 實現一個 protobuf 的 Java 例子

(點選上方公眾號,可快速關註)


來源:jihite ,

www.cnblogs.com/kaituorensheng/p/9022591.html

1. 介紹Protocol Buffers

Protocal Buffers(簡稱protobuf)是谷歌的一項技術,用於結構化的資料序列化、反序列化,常用於RPC 系統(Remote Procedure Call Protocol System)和持續資料儲存系統。

其類似於XML生成和解析,但protobuf的效率高於XML,不過protobuf生成的是位元組碼,可讀性比XML差,類似的還有json、Java的Serializable等。

很適合做資料儲存或 RPC 資料交換格式。可用於通訊協議、資料儲存等領域的語言無關、平臺無關、可擴充套件的序列化結構資料格式。

2. Idea 安裝protobuf外掛

安裝外掛protobuf Support,之後重啟

3. 配置依賴

pom.xml新增

       

            com.google.protobuf

            protobuf-java

            3.4.0

       

 

       

           

                kr.motd.maven

                os-maven-plugin

                1.4.1.Final

           

       

       

           

                org.xolstice.maven.plugins

                protobuf-maven-plugin

                0.5.0

               

                   

                        com.google.protobuf:protoc:3.1.0:exe:${os.detected.classifier}

                   

                    grpc-java

               

               

                   

                       

                            compile

                            compile-custom

                       

                   

               

           

       

4. 書寫proto檔案

syntax = “proto3”;

option java_package = “com.jihite”;

option java_outer_classname = “PersonModel”;

 

message Person {

     int32 id = 1;

     string name = 2;

     string email = 3;

}

5. 轉化成Java檔案


6. 測試

把生成的類考的程式碼路徑下,用下麵測試用例測試

package com.jihite;

 

import com.google.protobuf.InvalidProtocolBufferException;

import org.junit.Test;

public class protobufTest {

    @Test

    public void testN() throws InvalidProtocolBufferException {

        PersonModel.Person.Builder builder = PersonModel.Person.newBuilder();

        builder.setId(1);

        builder.setName(“jihite”);

        builder.setEmail(“jihite@jihite.com”);

 

        PersonModel.Person person = builder.build();

        System.out.println(“before:” + person);

 

        System.out.println(“===Person Byte:”);

        for (byte b : person.toByteArray()) {

            System.out.print(b);

        }

        System.out.println(“================”);

 

        byte[] byteArray = person.toByteArray();

        PersonModel.Person p2 = PersonModel.Person.parseFrom(byteArray);

        System.out.println(“after id:” + p2.getId());

        System.out.println(“after name:” + p2.getName());

        System.out.println(“after email:” + p2.getEmail());

 

    }

}

結果

before:id: 1

name: “jihite”

email: “jihite@jihite.com”

 

===Person Byte:

811861061051041051161012617106105104105116101641061051041051161014699111109================

after id:1

after name:jihite

after email:jihite@jihite.com

看完本文有收穫?請轉發分享給更多人

關註「ImportNew」,提升Java技能

贊(0)

分享創造快樂