序列化:將內存中的對象(數據)變成一個字節序。
反序列化:將字節序還原爲一個對象。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();//代表序列化的數 }