Protocol Buffers 是一種輕便高效的結構化數據存儲格式,可以用於結構化數據串行化,或者說序列化。它很適合做數據存儲或 RPC 數據交換格式。可用於通訊協議、數據存儲等領域的語言無關、平台無關、可擴展的序列化結構數據格式。
一、開發前的准備
下載protoful :https://github.com/google/protobuf/releases,下載需要的版本
二、創建.proto文件
option java_package = "io.netty.example.codec"
option java_outer_classname = "PersonProtobuf"
message Person {
required string name = 1;
required int32 id =2;
option string email = 3;
enum PhoneType{
MOBILE = 0;
HOME = 1;
WORK =2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
message CountryInfo {
required string name = 1;
required string code = 2;
optional int32 number = 3;
}
}
三、使用protoc.exe生成java類
解壓該下載的protoc-2.6.0-win32.zip,得到protoc.exe,把文件msg.proto拷貝到當前目錄執行
protoc.exe --java_out=./ msg.proto
在目錄下就會產生java類
四、protobuf的語法
proto文件中的數據類型可以分為兩大類:復合數據類型和標准數據類型,復合數據類型包括枚舉和message類型;標准數據類型包含:整形、浮點、字符串等,後面會詳細介紹。
•message
最常用的數據格式就是message,例如CountryInfo 可以用message表示:
message CountryInfo {
required string name = 1;
required string code = 2;
optional int32 number = 3;
}
Java生成後會是這樣的類
•required
必須賦值,不能為空,否則該條message會被認為是“uninitialized”。build一個“uninitialized” message會拋出一個RuntimeException異常,解析一條“uninitialized” message會拋出一條IOException異常。除此之外,“required”字段跟“optional”字段並無差別。
•optional
字段可以賦值,也可以不賦值。假如沒有賦值的話,會被賦上默認值。
•repeated
該字段可以重復任意次數,包括0次。重復數據的順序將會保存在protocol buffer中,將這個字段想象成一個可以自動設置size的數組就可以了
•Enum
enum PhoneType{
MOBILE = 0;
HOME = 1;
WORK =2;
}