protocol buffer全稱Google Protocol Buffers,是google開發的一套用於數據存儲,網絡通訊的協議編解碼的工具庫,與XML或者JSON相差很少,即把某種數據結構的信息,以某種格式(XML,JSON)保存起來,可是protobuf與XML和JSON不一樣在於,protobuf是基於二進制的。與XML和JSON的性能相別則是不言而喻的。 關於相關的性能對比能夠看這裏。 數組
Protobuf目前爲止有兩個版本,proto2和proto3,proto3與proto2相比支持更多語言,更加簡介,去掉了一些複雜的語法與特性,,更強調約定而弱化語法。 網絡
以下proto文件 數據結構
syntax = "proto2"; 工具
package msg; 性能
message CS_PlayerLogin{ ui
required string account=1; google
required string pwd=2; spa
} blog
message SC_PlayerLogin{ ip
//0成功 1帳號錯誤 2密碼錯誤
required sint32 result=1;
required uint64 playerId=2;
以後再跟上數據類型,數據類型以後爲字段名字,最後再跟上"=N",此處N是標誌位,每一個字段都有標誌位,各個標誌位不能重複且爲正整數,其最大值爲 2^29 - 1,同時protobuf內部預留了19000到19999不能被用戶使用,官方建議將經常使用的字段放在前面,因爲這個字段的大小隨着數值大小增長,如1-16只佔用一個字節(推薦消息字段個數很少餘16個)。最後能夠跟上自定義的默認值。
import "person.proto";
//引入外部proto文件,並讓引入了該文件的proto文件也能訪問被引入類型。
import public "person.proto";
protocol buffer的經常使用基礎數據類型:
數據類型 |
描述 |
字節個數 |
C#語言映射 |
bool |
布爾類型 |
1 |
bool |
double |
64位浮點數 |
N |
double |
float |
32爲浮點數 |
N |
float |
int32 |
32位整數 |
N |
int |
uin32 |
無符號32位整數 |
N |
uint |
int64 |
64位整數 |
N |
long |
uint64 |
64爲無符號整 |
N |
ulong |
sint32 |
32位整數,處理負數效率更高 |
N |
int |
sing64 |
64位整數 處理負數效率更高 |
N |
long |
fixed32 |
32位無符號整數 |
4 |
uint |
fixed64 |
64位無符號整數 |
8 |
ulong |
sfixed32 |
32位整數、能以更高的效率處理負數 |
4 |
uint |
sfixed64 |
64爲整數 |
8 |
ulong |
string |
只能處理 ASCII字符 |
N |
string |
bytes |
用於處理多字節的語言字符、如中文 |
N |
string |
enum |
能夠包含一個用戶自定義的枚舉類型uint32 |
N(uint32) |
enum |
message |
能夠包含一個用戶自定義的消息類型 |
N |
object of class |
map |
鍵值對,鍵可以使用string或數值類型 |
N |
Dictionary |