序列化:将内存中的对象(数据)变成一个字节序。
反序列化:将字节序还原为一个对象。ios
那么这个只须要此对象写入文件,而后完成序列化;函数
反序列化就是将此对象的序列化从新反序列化测试
/** 序列化:将内存中的对象(数据)变成一个字节序。 反序列化:将字节序还原为一个对象。 */ #include<stdio.h> #include<iostream> #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> #include<vector> #include <unistd.h> using namespace std; class A { private: int i;//这个数表明将要序列化的数,固然这个数能够更换类型,任意类型的均可 public: A(){ i = 0;//进行初始化 } //做用是代表该构造函数是显示的, 而非隐式的 explicit A(int j){ i = j; } virtual ~A(){//反析构函数 } public: void f(){//进行输出,反映了已经对那个进行了反序列化 cout<<"in f()"<<i<<endl; } public: bool Serialize(const char* pFilePath){//序列化 int fd = open(pFilePath,O_RDWR | O_CREAT | O_TRUNC, 0);//打开文件,若是文件不存在,就建立文件 cout << "begin Serialize"<< endl;//给个提示 if(fd == -1){//若是说打开文件或者建立文件错误,返回错误 cout << "Serialize open error" << endl; return false; } if (write(fd,&i,sizeof(int)) == -1)//若是说向文件里面写入数据时出错,出错缘由有磁盘满,没有访问权限,超过了给定进程的文件长度等 { cout << "Serialize write error" << endl; close(fd);//关闭文件 return false;//返回错误 } cout << "Serialize finish" << endl; return true;//若是上述打开与写都没有错误,那么则序列化成功 } bool Deserialize(const char* pFilePath){//反序列化 int fd = open(pFilePath,O_RDWR);//用读写的方式打开文件 cout << "Deserialize begin" << endl; if (fd == -1)//打开文件错误 { cout <<"Deserialize open error"<<endl; return false;//返回错误 } int r = read(fd,&i,sizeof(char));//从序列化的文件读出数据 if (r == -1)//读文件出错 { cout << "Deserialize read error"; close(fd);//关闭文件 return false;//返回错误 } if (close(fd) == -1){//若是关闭文件错误 cout << "Deserialize close error" << endl; return false;//返回错误 } cout << "Deserialize finish" << endl; return true;//上述操做都成功,那么则反序列化成功 } }; int main(){//进行测试 A a(12);//进行赋值 a.Serialize("data.txt");//讲此文件序列化 a.Deserialize("a.txt");//将此文件反序列化 a.f();//代表序列化的数 }