簡介
文件序列化與反序列化,也可以叫文件打包與解包,相當於tar命令中的僅打包命令:tar –cvf。如果直接調用Tar命令,則會在硬盤上留下一個打包文件,使用的時候再讀取到內存中,這種方法,打包時佔用一份時間,解包時佔用一份時間,讀取到內存中也佔用一份時間,如果調用的方式不對,可能會造成打包的時候還未打完包,調用函數就返回了,造成後續操作有誤。這種情況,我們就可以自己寫一套文件序列化與反序列化實現。
本文中主要講實現,代碼不予給出。
整體說明
將文件序列化,則至少要存儲文件的這些信息:文件名,上一節點名,文件內容,爲了說明這些內容,則要添加這些信息:文件名長度,文件大小等。這些信息作爲文件頭,文件內容作爲文件體,整理後便於傳輸:
參考文件頭:
struct stuDir
{
//父節點id
int nPID;
//當前節點id
int nCurID;
//當前文件名長度
int nFileNameSize;
//dir:1;file:2
int nFileType;
//dir不用這個參數
long long nFileSize;
//當前文件名
string strFileName;
}
序列化前:
文件名:abc
內容:“1234567890”
序列化後:
實現步驟
- 獲取打包後文件大小,便於後面可每次定讀取的大小範圍。
- 生成文件樹
- 統計全部文件頭+全部文件大小
- 打包,傳入讀取的範圍。
- 先輸出文件頭,後面跟着文件內容
- 解包,傳入文件內容
- 根據文件頭去解析,生成文件。
注意
- 文件頭最好用結構體,便於序列化寫入。
- 打包解包時,注意文件頭部分的截斷處理。