文件序列化與反序列化

簡介

文件序列化與反序列化,也可以叫文件打包與解包,相當於tar命令中的僅打包命令:tar –cvf如果直接調用Tar命令,則會在硬盤上留下一個打包文件,使用的時候再讀取到內存中,這種方法,打包時佔用一份時間,解包時佔用一份時間,讀取到內存中也佔用一份時間,如果調用的方式不對,可能會造成打包的時候還未打完包,調用函數就返回了,造成後續操作有誤。這種情況,我們就可以自己寫一套文件序列化與反序列化實現。

本文中主要講實現,代碼不予給出。

整體說明

         將文件序列化,則至少要存儲文件的這些信息:文件名,上一節點名,文件內容,爲了說明這些內容,則要添加這些信息:文件名長度,文件大小等。這些信息作爲文件頭,文件內容作爲文件體,整理後便於傳輸:

         參考文件頭:

         struct stuDir

{

    //父節點id

    int nPID;

    //當前節點id

    int nCurID;

    //當前文件名長度

    int nFileNameSize;

    //dir1file:2

    int nFileType;

    //dir不用這個參數

    long long nFileSize;

    //當前文件名

    string strFileName;

}

序列化前:

文件名:abc

內容:“1234567890

         序列化後:

實現步驟

  1. 獲取打包後文件大小,便於後面可每次定讀取的大小範圍。
    1. 生成文件樹
    2. 統計全部文件頭+全部文件大小
  2. 打包,傳入讀取的範圍。
    1. 先輸出文件頭,後面跟着文件內容
  3. 解包,傳入文件內容
    1. 根據文件頭去解析,生成文件。

注意

  1. 文件頭最好用結構體,便於序列化寫入。
  2. 打包解包時,注意文件頭部分的截斷處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章