目錄
一. 什么是PB
二. 定義(編寫實體描述文件)
三. 編譯(從描述文件到java類)
四. 項目中使用
五. 擴展
一. 什么是PB
? ProtocolBuffers-Google'sdatainterchangeformat
? 一種語言無關、平臺無關、擴展性好的用于通信協(xié)議、 數(shù)據(jù)存儲的結構化數(shù)據(jù)串行化方法。
? Java、C++或Python開發(fā)者
? 谷歌的數(shù)據(jù)交換格式
? 類似 JSON, XML
? GITHUB:https://github.com/google/protobuf/
為什么不用XML
? ProtocolBuffer擁有多項比XML更高級的串行化結構數(shù)
據(jù)的特性,ProtocolBuffer:
? ·更簡單
? ·小3-10倍
? ·快20-100倍
? ·更少的歧義
? ·可以方便的生成數(shù)據(jù)存取類
Protocol Buffers
? ProtocolBuffer是用于結構化數(shù)據(jù)串行化 的靈活、高效、自動的方法,有如XML, 不過它更小、更快、也更簡單。你可以定 義自己的數(shù)據(jù)結構,然后使用代碼生成器 生成的代碼來讀寫這個數(shù)據(jù)結構。你甚至 可以在無需重新部署程序的情況下更新數(shù) 據(jù)結構。
二. 定義(編寫實體描述文件) 建立一個msg.proto文件
option java_package = "com.protobuftest.protobuf";
option java_outer_classname = "PersonProbuf";
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
}
enum PhoneType {
MOBILE = 0; HOME = 1; WORK = 2;
}
三. 編譯(從描述文件到java類)
下載安裝編譯器。
找到.proto文件位置
運行編譯器,指定源目錄和目標目錄,定位你的 .proto 文件到源目錄,然后執(zhí)行:
protoc -I=$SRC_DIR --python_out= $DST_DIR addressbook.protoPython –python_out
四. 在項目(工程)中使用
加入類庫jar包
加入剛剛生成的 實體類文件
項目中使用 實體類的轉換
(1) 實體轉字節(jié)
String imei = getImei(); ObdRightBean.ObdRightRequest obdRightRequest;
.
obdRightRequest =
ObdRightBean.ObdRightRequest.newBuilder().setImei(imei).build();
//轉換成字節(jié) obdRightRequest.toByteArray()
(2) 字節(jié)轉實體
ObdRightBean.ObdRightResponse obdProductResponse = null;
obdProductResponse =
ObdRightBean.ObdRightResponse.parseFrom(bytes2);
int code = obdProductResponse.getCode();
討論
? HTTP+PB VS HTTPS+JSON ?
? PB協(xié)議中間序列號時會進行壓縮,網(wǎng)絡
傳輸更少 ?
? PB是加密的嗎? 還需要對字節(jié)DESC嗎? ? 開發(fā)效率? JSON更快?學習曲線?