文章目錄
- Google推出Protocol Buffers:爭奪網路時代資料格式
http://www.cnbeta.com/articles/59752.htmGoogle推出Protocol Buffers:爭奪網路時代資料格式
ugmbbc發佈於 2008-07-08 17:34:09|
2159 次閱讀 字型:大 小 預覽列印
感謝康爺的投遞
新聞來源:Google Code
在Web 2.0 時代,XML格式由於AJAX的風行以及RSS的普及而異軍突起。不過隨著Python和Ruby On Rails的走紅,以及各種API的發布,YAML,JSON也逐漸成名。此次,Google推出了Protocol Buffers,是想讓廣大編程者方便地使用Google網路傳輸資料的格式。
什麼是Protocol Buffers?
這是Protocol Buffers首頁上的一段代碼:
message Person {
required string name = 1;
required int32 id = 2;
optional 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;
}
而Protocol Buffers的作用,就是將以上格式的資料類型,自動產生Java, Python, and C++的代碼,然後以下一系列代碼就可以直接調用了:(C++中)
Person person;
person.set_name("John Doe");
person.set_id(1234);
person.set_email("jdoe@example.com");
fstream output("myfile", ios::out | ios::binary);
person.SerializeToOstream(&output); fstream input("myfile", ios::in | ios::binary);
Person person;
person.ParseFromIstream(&input);
cout << "Name: " << person.name() << endl;
cout << "E-mail: " << person.email() << endl;
相信所有C++編程者都為定義set,get之類的函數感到煩人過吧,而Google做的就是協助你省去這些麻煩,構造更利於網路傳輸的資料結構。
與XML的比較 優勢
更簡單
比XML小3到10倍體積
比XML快20到100倍
更不容易引起歧義
自動產生可程式化的類代碼
比較:
cout << "Name: " << person.name() << endl; cout << "E-mail: " << person.email() << endl;
cout << "Name: "
<< person.getElementsByTagName("name")->item(0)->innerText()
<< endl;
cout << "E-mail: "
<< person.getElementsByTagName("email")->item(0)->innerText()
<< endl; 劣勢
沒有層次,所以無法和HTML標記語言打交道
如果沒有message的定義,根本無法知道message的意思,而XML是自解釋型的。
Protocol Buffer首頁 Protocol Buffer下載原文地址:Google推出Protocol Buffers:爭奪網路時代資料格式