在C ++中反序列化类实例

时间:2015-11-08 20:31:46

标签: c++ serialization

这是我的* .h

class ip_file_handler {

   struct IPheader {
      unsigned short int ver :4;
      unsigned short int ihl :4;
      unsigned short int total_length;
      unsigned char tos;
      unsigned char ttl;
      unsigned char protocol;
      unsigned int checksum;
      unsigned short int identification;
      unsigned short int flag_offset;
      unsigned int ucSource;
      unsigned int ucDestination;
   };

   public:

   ip_file_handler(){}

   // func 1 (file to ip)
   static bool file_to_ip_packets(std::string input_file_name,
                                  std::string output_file_name,
                                  unsigned int source_ip,
                                  unsigned int destination_ip);

   private:

   IPheader ipInfo;
   list<string> data;
};

in * .cpp:

将所有文件数据导入myHandler。

此行将类写入文件:

ofstream outFile(output_file_name.c_str(), ios::out | ios::binary);
ip_file_handler myHandler;
outFile.write((char*) &myHandler,sizeof(ip_file_handler));

/ *这里的问题* / 这一行从文件中读取类:

ip_file_handler tmp;
outFile2.read((char*) &tmp, sizeof(ip_file_handler));

现在为什么不能从文件中读取类!? outFile是空的!

感谢所有人。 亚当

1 个答案:

答案 0 :(得分:1)

列表的数据(eh,data)不会存储在您的类中,而是在堆上单独分配。当您只是转储ip_file_handler

的副本时,它不会存储在文件中

您必须分别写出列表中的每个字符串,并在重新阅读时重新创建列表。