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