您好,登錄后才能下訂單哦!
由于在protobuf論壇上發過相關問題,但,根據https://developers.google.com/protocol-buffers/docs/techniques提供的相關解決辦法,自己測試下想再反饋給論壇,下面是測試過的,當想放到論壇時,好像那個問題已經關閉了。
其實和自定義一種數據結構沒什么區別。
proto file中的定義是:
enum FileAction {
FILE_ACTION_ADD = 3;
FILE_ACTION_DEL = 2;
FILE_ACTION_MODIFY = 1;
FILE_ACTION_RENAME = 0;
}
message FileState {
required string name = 1; // file name
required FileAction state = 2; // file state
}
- #include "GFileState.pb.h"
- #include <fstream>
- #include <string>
- #include <iostream>
- using std::string;
- using std::fstream;
- using std::cout;
- int main(int argc,char* argv[])
- {
- string fPath("message.txt");
- string strMsg;
- char buf[1024] = {0};
- fstream f;
- int size;
- f.open(fPath.c_str(),std::ios_base::app | std::ios_base::binary);
- FileState msg,msg2;
- msg.set_name("D:\\Test1");
- msg.set_state(FILE_ACTION_ADD);
- msg.SerializeToString(&strMsg);
- //msg.SerializePartialToString(&strMsg);
- size = strMsg.length();
- f.write((char*)&size,sizeof(size));
- f.write(strMsg.c_str(),size);
- f.seekg(std::ios_base::end);
- msg.set_name("/usr/home/nc/download");
- msg.set_state(FILE_ACTION_MODIFY);
- msg.SerializeToString(&strMsg);
- size = strMsg.length();
- f.write((char*)&size,sizeof(size));
- f.write(strMsg.c_str(),size);
- f.close();
- f.open(fPath.c_str(),std::ios_base::in | std::ios_base::binary);
- f.seekg(std::ios_base::beg);
- strMsg.clear();
- size = 0;
- while(!f.eof())
- {
- f.read((char*)&size,sizeof(size));
- if(size > 0 && size < sizeof(buf))
- {
- f.read(buf,size);
- msg.ParseFromString(buf);
- cout<<"name:\t\t"<<msg.name()<<std::endl;
- cout<<"state:\t\t"<<static_cast<int>(msg.state())<<std::endl;
- }
- msg.Clear();
- memset(buf,'\0',sizeof(buf));
- size = 0;
- }
- f.close();
- std::cin >>strMsg;
- return 0;
- }
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。