文件序列化与反序列化

简介

文件序列化与反序列化,也可以叫文件打包与解包,相当于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. 打包解包时,注意文件头部分的截断处理。
点赞