關於 Protocol Buffer 的簡單運用

2021-06-06 11:08:32 字數 1258 閱讀 4482

最近專案中,有使用到protobuf,但只是用來作為資料結構流儲存資料到資料庫,因此,只是用到及少部分內容

首先,需要建立乙個字尾名為.proto的檔案,暫定其名為test.proto,此檔案是protobuf的預讀檔案.其格式為:

package rt;

message protodata

repeated protoattrvalue m_mapattrvalue=4;

}

protobuf有一些關鍵字:

package  //相當於namespace

message //相當於c++的struct關鍵字

required  //表示此資料型別是必須的

optional  //表示此資料型別是可選的

repeated //表示此資料是個不定長陣列

之後,建立乙個generated資料夾用於放置轉換為執行檔案的protobuf檔案

再寫乙個批處理程式命名為transfer.bat,其內容為

protoc --proto_path=.\ --cpp_out=.\generated test.proto

pause

執行此批處理程式,在generated檔案下,將會出現兩個檔案,test.pb.cc和test.pb.h,這兩個就是c++工程所需要的檔案,將其引入工程,編譯,之後在c++**中就可以這樣使用protobuf:

//設定資料

rt::protodata data;

data.set_playerid(5);

data.set_name("張三");

rt::protodata::protoattrvalue* pattr = data.add_m_mapattrvalue();

pattr->set_attrtype(2);

pattr->set_attrvalue(4);

std::string protobuf;

data;.serializetostring(&protobuf);//組成protobuf

//讀取資料

rt::protodata data;

data.parsefromstring(protobuf);

int nid = data.playerid();

std::string name = data.name();

int nsize = data.m_mapattrvalue_size();

for ( int n=0; n

官網)

使用objc的protocol buffer小記

使用protocol buffer傳輸資料,相比json,資料量大大降低。不過objc的protocol buffer實現還是有很多小缺陷的,比較令人鬱悶的是沒有property的set方法。為了修改一些entity的屬性,使用了category自己寫了一些set方法,結果導致了很多序列化的問題。發...

關於程式關於世界

首先,在學了1年多的軟體設計的基礎上,問下自己 程式是什麼?業務需求是什麼?程式有什麼用?什麼是演算法?什麼是資料庫?或許每個人的理解不同,會給出不同的答案。那麼自己的理解 程式是乙個讓計算機工作的流程,在程式寫好之後,計算機就會按照,程式設計師定義好流程在執行。其實很多時候,乙個程式的好壞,在於乙...

關於血液關於軟體

1 自然沉降法 將血袋垂直吊掛於4 2 冰箱內,使紅細胞自然下沉1 3d,或將血袋呈70 80 角立於冰箱,需用時,用一次性分漿器分出血漿,制得濃縮紅細胞。2 洗滌法 一般用生理鹽水反覆洗滌3 6次。經洗滌的紅細胞,除白細胞和血小板減少外,血漿蛋白也極少,紅細胞中殘存的血漿蛋白含量約為原總蛋白的1 ...