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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

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

00. 目錄

文章目錄

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

01. 數(shù)組的序列化和反序列化

參考代碼

#include "addressbook.pb.h" #include <iostream> using namespace std;/* //C數(shù)組的序列化和序列化API //在/usr/local/include/google/目錄下,查找包含"SerializeToArray"所有的文件,同時(shí)打印所在行 //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(); //獲取長(zhǎng)度cout << "len = " << len << endl;obj.SerializeToArray(buf, len);//序列化,obj成員保存在buf中 }void get_person() {Person obj;obj.ParseFromArray(buf, len); //反序列化,buf的內(nèi)容設(shè)置給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; }

編譯和執(zhí)行結(jié)果

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成員的內(nèi)容設(shè)置給str }void get_person() {Person obj;obj.ParseFromString(str); //反序列化, str內(nèi)容設(shè)置給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; }

編譯和執(zhí)行結(jié)果

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:讀寫(xiě)int fd = open("./pb.itcast", O_CREAT | O_TRUNC | O_RDWR, 0644);if (fd <= 0){perror("open");exit(0);}obj.SerializeToFileDescriptor(fd); //序列化,obj成員的內(nèi)容寫(xiě)入fd所關(guān)聯(lián)的文件中close(fd); //關(guān)閉文件 }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文件內(nèi)容設(shè)置給obj的成員close(fd); //關(guān)閉文件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; }

編譯和執(zhí)行結(jié)果

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();//關(guān)閉文件 }void get_person() {Person obj;fstream input("./pb.itcast", ios::in | ios::binary);obj.ParseFromIstream(&input); //反序列化input.close(); //關(guān)閉文件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; }

編譯和執(zhí)行結(jié)果

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

測(cè)試代碼下載:測(cè)試代碼

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。