ProtoBuf 常用序列化/反序列化API 转

时间:2021-06-15 17:30:26

http://blog.csdn.net/sealyao/article/details/6940245

1、C数组的序列化和反序列化API

  1. //C数组的序列化和序列化API
  2. bool ParseFromArray(const void* data, int size);
  3. bool SerializeToArray(void* data, int size) const;
  4. //使用
  5. void set_people()
  6. {
  7. wp.set_name("sealyao");
  8. wp.set_id(123456);
  9. wp.set_email("sealyaog@gmail.com");
  10. wp.SerializeToArray(parray,256);
  11. }
  12. void get_people()
  13. {
  14. rap.ParseFromArray(parray,256);
  15. cout << "Get People from Array:" << endl;
  16. cout << "\t Name : " <<rap.name() << endl;
  17. cout << "\t Id : " << rap.id() << endl;
  18. cout << "\t email : " << rap.email() << endl;
  19. }

2、C++ String的序列化和反序列化API

  1. //C++string序列化和序列化API
  2. bool SerializeToString(string* output) const;
  3. bool ParseFromString(const string& data);
  4. //使用:
  5. void set_people()
  6. {
  7. wp.set_name("sealyao");
  8. wp.set_id(123456);
  9. wp.set_email("sealyaog@gmail.com");
  10. wp.SerializeToString(&pstring);
  11. }
  12. void get_people()
  13. {
  14. rsp.ParseFromString(pstring);
  15. cout << "Get People from String:" << endl;
  16. cout << "\t Name : " <<rsp.name() << endl;
  17. cout << "\t Id : " << rsp.id() << endl;
  18. cout << "\t email : " << rsp.email() << endl;
  19. }

3、文件描述符序列化和反序列化API

  1. //文件描述符的序列化和序列化API
  2. bool SerializeToFileDescriptor(int file_descriptor) const;
  3. bool ParseFromFileDescriptor(int file_descriptor);
  4. //使用:
  5. void set_people()
  6. {
  7. fd = open(path,O_CREAT|O_TRUNC|O_RDWR,0644);
  8. if(fd <= 0){
  9. perror("open");
  10. exit(0);
  11. }
  12. wp.set_name("sealyaog");
  13. wp.set_id(123456);
  14. wp.set_email("sealyaog@gmail.com");
  15. wp.SerializeToFileDescriptor(fd);
  16. close(fd);
  17. }
  18. void get_people()
  19. {
  20. fd = open(path,O_RDONLY);
  21. if(fd <= 0){
  22. perror("open");
  23. exit(0);
  24. }
  25. rp.ParseFromFileDescriptor(fd);
  26. std::cout << "Get People from FD:" << endl;
  27. std::cout << "\t Name : " <<rp.name() << endl;
  28. std::cout << "\t Id : " << rp.id() << endl;
  29. std::cout << "\t email : " << rp.email() << endl;
  30. close(fd);
  31. }

4、C++  stream 序列化和反序列化API

    1. //C++ stream 序列化/反序列化API
    2. bool SerializeToOstream(ostream* output) const;
    3. bool ParseFromIstream(istream* input);
    4. //使用:
    5. void set_people()
    6. {
    7. fstream fs(path,ios::out|ios::trunc|ios::binary);
    8. wp.set_name("sealyaog");
    9. wp.set_id(123456);
    10. wp.set_email("sealyaog@gmail.com");
    11. wp.SerializeToOstream(&fs);
    12. fs.close();
    13. fs.clear();
    14. }
    15. void get_people()
    16. {
    17. fstream fs(path,ios::in|ios::binary);
    18. rp.ParseFromIstream(&fs);
    19. std::cout << "\t Name : " <<rp.name() << endl;
    20. std::cout << "\t Id : " << rp.id() << endl;
    21. std::cout << "\t email : " << rp.email() << endl;
    22. fs.close();
    23. fs.clear();
    24. }