91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

protobuf read/write multiple messages from/to a file

發布時間:2020-06-05 07:24:38 來源:網絡 閱讀:1053 作者:hakuyo 欄目:移動開發

由于在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
}

  1. #include "GFileState.pb.h" 
  2. #include <fstream> 
  3. #include <string> 
  4. #include <iostream> 
  5. using std::string; 
  6. using std::fstream; 
  7. using std::cout; 
  8. int main(int argc,char* argv[]) 
  9.     string      fPath("message.txt"); 
  10.     string      strMsg; 
  11.     char        buf[1024] = {0}; 
  12.     fstream     f; 
  13.     int         size; 
  14.     f.open(fPath.c_str(),std::ios_base::app | std::ios_base::binary); 
  15.     FileState msg,msg2; 
  16.     msg.set_name("D:\\Test1"); 
  17.     msg.set_state(FILE_ACTION_ADD); 
  18.     msg.SerializeToString(&strMsg); 
  19.     //msg.SerializePartialToString(&strMsg); 
  20.     size        = strMsg.length(); 
  21.     f.write((char*)&size,sizeof(size)); 
  22.     f.write(strMsg.c_str(),size); 
  23.     f.seekg(std::ios_base::end); 
  24.  
  25.     msg.set_name("/usr/home/nc/download"); 
  26.     msg.set_state(FILE_ACTION_MODIFY); 
  27.     msg.SerializeToString(&strMsg); 
  28.      
  29.     size        = strMsg.length(); 
  30.     f.write((char*)&size,sizeof(size)); 
  31.     f.write(strMsg.c_str(),size); 
  32.     f.close(); 
  33.  
  34.     f.open(fPath.c_str(),std::ios_base::in | std::ios_base::binary); 
  35.     f.seekg(std::ios_base::beg); 
  36.     strMsg.clear(); 
  37.     size = 0; 
  38.     while(!f.eof()) 
  39.     {    
  40.         f.read((char*)&size,sizeof(size)); 
  41.         if(size > 0 && size < sizeof(buf)) 
  42.         { 
  43.             f.read(buf,size); 
  44.             msg.ParseFromString(buf); 
  45.             cout<<"name:\t\t"<<msg.name()<<std::endl; 
  46.             cout<<"state:\t\t"<<static_cast<int>(msg.state())<<std::endl; 
  47.         } 
  48.         msg.Clear(); 
  49.         memset(buf,'\0',sizeof(buf)); 
  50.         size = 0; 
  51.     } 
  52.     f.close(); 
  53.     std::cin >>strMsg; 
  54.     return 0; 

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥棱县| 伊通| 泾川县| 栖霞市| 宜川县| 龙海市| 白沙| 馆陶县| 博野县| 东城区| 淮安市| 衢州市| 正镶白旗| 肃宁县| 稻城县| 钦州市| 大田县| 承德县| 琼结县| 铁力市| 类乌齐县| 广元市| 留坝县| 乌拉特前旗| 靖宇县| 察雅县| 威宁| 乐清市| 靖江市| 宁明县| 沅江市| 惠东县| 名山县| 蒙自县| 昭通市| 久治县| 越西县| 普陀区| 乌鲁木齐市| 忻州市| 竹北市|