日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Protocol Buffer】Protocol Buffer入门教程(四):序列化和反序列化

發布時間:2024/4/24 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Protocol Buffer】Protocol Buffer入门教程(四):序列化和反序列化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 數組的序列化和反序列化
    • 02. 字符串序列化和反序列化
    • 03. 文件描述符序列化和反序列化
    • 04. C++ Stream序列化和反序列化
    • 05. 附錄

01. 數組的序列化和反序列化

參考代碼

#include "addressbook.pb.h" #include <iostream> using namespace std;/* //C數組的序列化和序列化API //在/usr/local/include/google/目錄下,查找包含"SerializeToArray"所有的文件,同時打印所在行 //sudo grep "SerializeToArray" -r /usr/local/include/google/ -nbool SerializeToArray(void* data, int size) const; //序列化 bool ParseFromArray(const void* data, int size); //反序列化 */ char buf[1024]; int len;void set_person() {Person obj;obj.set_name("itcast");obj.set_id(88);*obj.mutable_email() = "itcast@qq.com"; //obj.set_email("itcast@qq.com");len = obj.ByteSize(); //獲取長度cout << "len = " << len << endl;obj.SerializeToArray(buf, len);//序列化,obj成員保存在buf中 }void get_person() {Person obj;obj.ParseFromArray(buf, len); //反序列化,buf的內容設置給obj的成員cout << "name = " << obj.name() << endl;cout << "id = " << obj.id() << endl;cout << "email = " << obj.email() << endl; }int main() {// Verify that the version of the library that we linked against is// compatible with the version of the headers we compiled against.GOOGLE_PROTOBUF_VERIFY_VERSION;set_person(); //序列化get_person(); //反序列化// Optional: Delete all global objects allocated by libprotobuf.google::protobuf::ShutdownProtobufLibrary();return 0; }

編譯和執行結果

deng@itcast:/mnt/hgfs/LinuxHome/day03$ ls addressbook.pb.cc addressbook.pb.h addressbook.proto a.out test.cpp deng@itcast:/mnt/hgfs/LinuxHome/day03$ g++ test.cpp addressbook.pb.cc `pkg-config --libs --cflags protobuf` deng@itcast:/mnt/hgfs/LinuxHome/day03$ ./a.out len = 25 name = itcast id = 88 email = itcast@qq.com deng@itcast:/mnt/hgfs/LinuxHome/day03$

02. 字符串序列化和反序列化

參考代碼

#include "addressbook.pb.h" #include <iostream> using namespace std;//bool SerializeToString(string* output) const; //bool ParseFromString(const string& data); string str; //全局變量void set_person() {Person obj;obj.set_name("itcast");obj.set_id(88);obj.set_email("itcast@qq.com");//*obj.mutable_email() = "itcast@qq.com";obj.SerializeToString(&str); //序列化,obj成員的內容設置給str }void get_person() {Person obj;obj.ParseFromString(str); //反序列化, str內容設置給obj的成員cout << "name = " << obj.name() << endl;cout << "id = " << obj.id() << endl;cout << "email = " << *obj.mutable_email() << endl; }int main() {// Verify that the version of the library that we linked against is// compatible with the version of the headers we compiled against.GOOGLE_PROTOBUF_VERIFY_VERSION;set_person(); //序列化get_person(); //反序列化// Optional: Delete all global objects allocated by libprotobuf.google::protobuf::ShutdownProtobufLibrary();return 0; }

編譯和執行結果

deng@itcast:/mnt/hgfs/LinuxHome/day03$ ls addressbook.pb.cc addressbook.proto test01.cpp addressbook.pb.h a.out test.cpp deng@itcast:/mnt/hgfs/LinuxHome/day03$ g++ test.cpp addressbook.pb.cc `pkg-config --libs --cflags protobuf` deng@itcast:/mnt/hgfs/LinuxHome/day03$ ./a.out name = itcast id = 88 email = itcast@qq.com deng@itcast:/mnt/hgfs/LinuxHome/day03$

03. 文件描述符序列化和反序列化

參考代碼

#include "addressbook.pb.h" #include <iostream>#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h>using namespace std;//bool SerializeToFileDescriptor(int file_descriptor) const; //bool ParseFromFileDescriptor(int file_descriptor); void set_person() {Person obj;obj.set_name("itcast");obj.set_id(1);obj.set_email("itcast@qq.com");//*obj.mutable_email() = "itcast@qq.com";//O_CREAT: 新建文件, O_TRUNC:清空文件,O_RDWR:讀寫int fd = open("./pb.itcast", O_CREAT | O_TRUNC | O_RDWR, 0644);if (fd <= 0){perror("open");exit(0);}obj.SerializeToFileDescriptor(fd); //序列化,obj成員的內容寫入fd所關聯的文件中close(fd); //關閉文件 }void get_person() {int fd = open("./pb.itcast", O_RDONLY); //O_RDONLY: 只讀方式if (fd <= 0){perror("open");exit(0);}Person obj;obj.ParseFromFileDescriptor(fd); //反序列化, fd文件內容設置給obj的成員close(fd); //關閉文件cout << "name = " << obj.name() << endl;cout << "id = " << obj.id() << endl;cout << "email = " << *obj.mutable_email() << endl; }int main() {// Verify that the version of the library that we linked against is// compatible with the version of the headers we compiled against.GOOGLE_PROTOBUF_VERIFY_VERSION;set_person(); //序列化get_person(); //反序列化// Optional: Delete all global objects allocated by libprotobuf.google::protobuf::ShutdownProtobufLibrary();return 0; }

編譯和執行結果

deng@itcast:/mnt/hgfs/LinuxHome/day03$ ls addressbook.pb.cc addressbook.proto pb.itcast test02.cpp addressbook.pb.h a.out test01.cpp test.cpp deng@itcast:/mnt/hgfs/LinuxHome/day03$ g++ test.cpp addressbook.pb.cc `pkg-config --libs --cflags protobuf` deng@itcast:/mnt/hgfs/LinuxHome/day03$ ./a.out name = itcast id = 1 email = itcast@qq.com deng@itcast:/mnt/hgfs/LinuxHome/day03$

04. C++ Stream序列化和反序列化

參考代碼

#include "addressbook.pb.h" #include <iostream> #include <fstream>using namespace std;//bool SerializeToOstream(ostream* output) const; //bool ParseFromIstream(istream* input); void set_person() {Person obj;obj.set_name("itcast");obj.set_id(1);obj.set_email("itcast@qq.com");//*obj.mutable_email() = "itcast@qq.com";fstream output("pb.itcast", ios::out | ios::trunc | ios::binary);bool flag = obj.SerializeToOstream(&output);//序列化if (!flag){cerr << "Failed to write file." << endl;return;}output.close();//關閉文件 }void get_person() {Person obj;fstream input("./pb.itcast", ios::in | ios::binary);obj.ParseFromIstream(&input); //反序列化input.close(); //關閉文件cout << "name = " << obj.name() << endl;cout << "id = " << obj.id() << endl;cout << "email = " << *obj.mutable_email() << endl; }int main() {// Verify that the version of the library that we linked against is// compatible with the version of the headers we compiled against.GOOGLE_PROTOBUF_VERIFY_VERSION;set_person(); //序列化get_person(); //反序列化// Optional: Delete all global objects allocated by libprotobuf.google::protobuf::ShutdownProtobufLibrary();return 0; }

編譯和執行結果

deng@itcast:/mnt/hgfs/LinuxHome/day03$ ls addressbook.pb.cc addressbook.proto pb.itcast test02.cpp test.cpp addressbook.pb.h a.out test01.cpp test03.cpp deng@itcast:/mnt/hgfs/LinuxHome/day03$ g++ test.cpp addressbook.pb.cc `pkg-config --libs --cflags protobuf` deng@itcast:/mnt/hgfs/LinuxHome/day03$ ./a.out name = itcast id = 1 email = itcast@qq.com deng@itcast:/mnt/hgfs/LinuxHome/day03$

05. 附錄

參考博客:https://blog.csdn.net/sealyao/article/details/6940245

測試代碼下載:測試代碼

總結

以上是生活随笔為你收集整理的【Protocol Buffer】Protocol Buffer入门教程(四):序列化和反序列化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲人成久久 | 中文字幕婷婷 | h网站在线观看 | 青青草视频免费 | 日韩欧美三级视频 | 美女三区 | 射射综合网 | 波多野结衣av无码 | 一本色道av | 狠狠干av| 日韩小视频在线 | 自拍偷拍视频网 | 免费看av的网址 | 免费国产一级 | 亚洲一区二区三区电影在线观看 | wwwxxx亚洲 | 亚洲卡一卡二 | 自拍视频在线播放 | 91免费 看片 | 性欧美video另类hd尤物 | 久久精品视频免费观看 | 国产精品久久一区二区三区 | 特级西西444www高清大胆免费看 | 69sex久久精品国产麻豆 | 日本一区二区欧美 | 欧美一区二区三区四区五区六区 | 国外成人性视频免费 | 日韩欧美视频免费在线观看 | 一道本在线观看 | 最新在线视频 | 日韩精品国产一区 | 琪琪午夜伦理影院7777 | 三级欧美视频 | 五月天一区二区三区 | 调教一区二区 | 麻豆精品国产精华精华液好用吗 | 在线99视频 | 国产福利网站 | 五月在线视频 | 中文字幕一区二区三 | av在线男人天堂 | 久久中文精品 | 富二代成人短视频 | 91网站视频在线观看 | 国产欧美熟妇另类久久久 | 蜜桃av噜噜一区二区三区小说 | 在线免费播放av | 天堂国产一区二区三区 | 欧美成人精品在线观看 | 国产毛片久久久久久久 | 成人一区二区三区仙踪林 | 老司机深夜网站 | 天天干天天色 | 日韩精品久久久久久免费 | 国产操操操 | 四虎最新站名点击进入 | 精品在线播放 | 伊人国产精品 | 久久激情免费视频 | 高清国产一区二区三区四区五区 | 91视频88av| 在线播放一级片 | 国产精品一区二区视频 | 性久久久久久久 | 97人人草 | 日韩av线上| 91麻豆精品一区二区三区 | 欧美视频一区二区三区在线观看 | 免费成人高清在线视频 | 日韩精品福利视频 | 最新视频在线观看 | 国产一级片在线播放 | 日韩资源| 久久久蜜桃一区二区 | 丝袜 中出 制服 人妻 美腿 | 国内精品久久久久久久久久 | 中文字幕一区二区在线播放 | 少妇一级视频 | 亚洲视频在线视频 | 欧美日韩一二三区 | 日韩操比 | 免费看毛片网站 | 99久久精品国产毛片 | 日本不卡一二三区 | 亚洲免费在线观看av | 一本大道久久a久久综合婷婷 | 91久久久久国产一区二区 | 天天躁夜夜躁 | 欧美激情久久久久久久 | 秋霞精品一区二区三区 | 色诱久久av| 蜜桃视频污在线观看 | 午夜视频在线播放 | 欧美亚洲精品一区二区 | 91亚洲天堂| 国产一区二区自拍视频 | 乖女从小调教h尿便器小说 欧美韩一区二区 | 别揉我奶头啊嗯一区二区 | 亚洲成人免费av |