Java中使用protobuf的基礎知識
protobuf的相比xml、json協議的優勢已經是很明顯的
首先 protobuf是一個開源專案,是goole內部久經考驗的一個東西。主要用於結構化資料序列化的靈活、高效、自動的方法,有如XML,不過他更小,更快,也更簡單。你可以定義自己的資料結構,然後使用程式碼生成器生成的程式碼來讀寫這個資料結構。甚至可以在無需重新部署程式的情況下更新資料結構。
protobuf的優點:
1、效能好/效率高
時間開銷: XML格式化(序列化)的開銷還好;但是XML解析(反序列化)的開銷就不敢恭維了。 但是protobuf在這個方面就進行了優化。可以使序列化和反序列化的時間開銷都減短。
空間開銷:也減少了很多
2、有程式碼生成機制
比如你你寫個一下類似結構體的內容
3、支援向後相容和向前相容
當客戶端和伺服器同事使用一塊協議的時候, 當客戶端在協議中增加一個位元組,並不會影響客戶端的使用
4、支援多種程式語言
在Google官方釋出的原始碼中包含了c++、java、Python三種語言
protobuf的缺陷
1、二進位制格式導致可讀性差
為了提高效能,protobuf採用了二進位制格式進行編碼。這直接導致了可讀性差。
2、缺乏自描述
一般來說,XML是自描述的,而protobuf格式則不是。 給你一段二進位制格式的協議內容,不配合你寫的結構體是看不出來什麼作用的。
總結起來也可以認為安全性好。
公司的專案利用protobuf與MQ和不同的系統進行通訊。很好的使用了protobuf的語言轉換的功能,web端(JAVA)與服務端(C++)的進行互動就是使用了protobuf。
protobuf正確使用姿勢:
第一步:下載protobuf的編譯器,並配置環境變數。
第二步:根據proto檔案生成.java檔案(就是所謂的模型)。
第三步:將生成的模型複製到我們的專案中使用。
這篇部落格主要關注點在如何生成.java檔案上,後期使用沒有著重講述。系統是win10的
2、配置protobuf環境變數,找到protoc.exe的路徑,如下圖:
3、執行編譯命令,首先需要cd到.proto檔案目錄下如:執行次指令碼:
protoc --proto_path=./ --java_out=./ ./Student.proto
輸入腳本回車即可執行:
.java檔案就會生成了
最後給出.proto檔案給大家:
syntax = "proto3";
//生成檔案所在包名
option java_package = "com.demo";
//生成的java檔名
option java_outer_classname = "ProtoDemo";
message Student {
int32 id = 1;
string name = 2;
string email = 3;
//列舉類
enum Sex {
MAN = 0;
WOMAN = 1;
}
Sex sex = 4 ;
enum PhoneType{
MOBILE = 0;
HOME = 1;
WORK = 2;
}
//內部類
message PhoneNumber {
string number = 1;
PhoneType type = 2 ;
}
//集合
repeated PhoneNumber phone = 5;
}
哈哈哈~~~,大功告成!