Protobuf java使用

ProtoBuf安裝

ProtoBuf源碼下載:https://github.com/google/protobuf/releases

windows編譯器:protoc-3.6.1-win32.zip

Windows環(huán)境

protobuf-all-3.6.1.zip包解壓,再將protoc-3.6.1-win32.zip解壓把protoc.exe程序放到解壓的protobuf-all-3.6.1的src文件夾目錄下

新建Java項目(gradle)

通過idea新建一個gradle項目,在build.gradle文件下添加:

compile group:'com.google.protobuf',name:'protobuf-java',version:'3.6.1'

創(chuàng)建test.proto文件

syntax = "proto3";                                            //設(shè)置版本號,如不設(shè)置,默認2.0版本語法
option java_outer_classname = "PersonEntity";//生成的數(shù)據(jù)訪問類的類名
option java_package = "com.smart.protobufdemo.protobuf";  //生成的數(shù)據(jù)訪問類的package
message Person {
   int32 id = 1;//同上
   string name = 2;//必須字段,在后面的使用中必須為該段設(shè)置值
   string email = 3;//可選字段,在后面的使用中可以自由決定是否為該字段設(shè)置值
}

創(chuàng)建一個protoc命令代碼

package com.smart.protobufdemo;

import java.io.IOException;

/**
 * @date : 2018/8/7 16:14
 * @author: lichen
 * @email : 1960003945@qq.com
 * @description :
 */
public class ExeProtobuf {
    public static void main(String[] args) throws IOException {
        String strCmd = "F:\\environment\\protobuf-all-3.6.1\\protobuf-3.6.1\\src\\protoc.exe " +  //下載的protoc.exe文件絕對路徑
                " -I=F:\\workspace\\java\\ProtobufDemo " +                                  //test.proto文件相對路徑
                " --java_out=F:\\workspace\\java\\ProtobufDemo\\src\\main\\java " +      //要生成的實體類路徑
                " F:\\workspace\\java\\ProtobufDemo\\test.proto";                           //test.proto文件絕對路徑

        Runtime.getRuntime().exec(strCmd);
    }
}

運行ExeProtobuf的main方法,在指定文件目錄下生成PersonEntity類

測試

package com.smart.protobufdemo;

import com.smart.protobufdemo.protobuf.PersonEntity;

import java.io.IOException;

/**
 * @date : 2018/8/7 16:14
 * @author: lichen
 * @email : 1960003945@qq.com
 * @description :
 */

class ProtobufTest {
    public static void main(String[] args) throws IOException
    {
        //模擬將對象轉(zhuǎn)成byte[],方便傳輸
        PersonEntity.Person.Builder builder = PersonEntity.Person.newBuilder();
        builder.setId(3);
        builder.setName("zhangsan");
        builder.setEmail("test@qq.com");
        PersonEntity.Person person = builder.build();
        System.out.println("before :" + person.toString());

        System.out.println("===========Person Byte==========");
        for (byte b : person.toByteArray())
        {
            System.out.print(b);
        }
        System.out.println();
        System.out.println(person.toByteString());
        System.out.println("================================");

        //模擬接收Byte[],反序列化成Person類
        byte[] byteArray = person.toByteArray();
        PersonEntity.Person p2 = PersonEntity.Person.parseFrom(byteArray);
        System.out.println("after :" + p2.toString());
    }

}

結(jié)果

---------------------------------分割線----------------------------------

Mac環(huán)境

安裝

下載mac版本的protobuf 解壓到指定目錄
先給指定目錄添加權(quán)限(sudo chmod -R 777 某一目錄)
cd到指定目錄,終端執(zhí)行一下步驟

./configure
make
make check
make install

通過protoc --version 查看是否安裝成功

編譯proto文件,生成對應(yīng)的java文件

protoc --java_out=./ protocal.proto
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容