[发明专利]一种基于哈希的文件打包和读取方法有效
申请号: | 201210333907.0 | 申请日: | 2012-09-11 |
公开(公告)号: | CN102880677A | 公开(公告)日: | 2013-01-16 |
发明(设计)人: | 陈飞舟;吴才忠;刘畅 | 申请(专利权)人: | 珠海金山网络游戏科技有限公司;成都西山居互动娱乐科技有限公司 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 广州嘉权专利商标事务所有限公司 44205 | 代理人: | 陈国荣 |
地址: | 519000 广东省珠*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 文件 打包 读取 方法 | ||
技术领域
本发明涉及一种文件打包和读取方法,尤其是一种基于哈希的文件打包和读取方法。
背景技术
现有软件客户端资源通常采用打包方式存储,从而获得传输方便、资源保密、以及更加快速访问速度等优点。在打包过程中,由于采用二分或B+树等传统的索引方式,其索引速度还有待提升;同时,由于传统包文件使用文件路径名作为包内文件的唯一标识,索引比较过程中需要进行字串中字符的逐一比较,相对耗时。在读取过程中,由于包文件中索引信息存储了包内文件的路径信息,恶意用户可以通过这些信息完全还原打包前文件的目录结构,这给软件产品带来了安全隐患。
发明内容
为了解决上述技术问题,本发明所采用的技术方案是:一种基于哈希的文件打包方法,打包方法包括以下步骤:
A、依次读取所需打包的文件;
B、计算上述文件路径的哈希值;
C、将上述文件写入包文件中的文件数据区;
D、将文件路径的哈希值与文件的偏移值写入包文件中的哈希表;
E、判断是否读取完所有需打包的文件,若否,则继续执行步骤A,若是,则结束文件的打包。
进一步,步骤B包括以下子步骤:
B1、计算文件路径哈希值;
B2、判断是否哈希冲突;
B3、若不存在哈希冲突,则继续执行步骤C;若存在哈希冲突,则改换哈希算法或者文件路径名称后,回到步骤B1重新执行。
进一步,包文件中不保存包内文件的路径信息、目录结构或文件名。
为了解决上述技术问题,本发明所采用的另一技术方案是:一种基于哈希的文件读取方法,读取方法包括以下步骤:
F、读取工具从上层应用接收到所需读取的文件的索引信息,通过文件索引信息获取包内文件的路径的哈希值;
G、在哈希表中查找哈希值对应的偏移值;
H、在包文件中的文件数据区读取与偏移值对应的数据文件。
进一步,步骤F中的文件索引信息为包内文件的路径。
进一步,步骤F中的文件索引信息为包内文件的路径的哈希值。
本发明的有益效果是:采用本发明的打包方法,包文件中哈希值唯一标识包内每一个文件,哈希表保存哈希值与偏移值的对应关系,读取包内文件不需要进行字串匹配,仅通过标识文件的哈希值即能从哈希表中快速定位具体包内文件的偏移信息,极大的提高了读取速度。
本发明的另一有益效果是:采用本发明的读取方法,与以往的读取方式相比,读取过程中可以不需要用到文件路径,从而恶意用户无法通过打包后的文件还原出打包前的原始目录结构。
附图说明
图1是本发明中打包后所得到的文件包示意图;
图2是本发明中打包过程的步骤图;
图3是图2所示打包过程中步骤B的子步骤图;
图4是本发明中读取过程的步骤图。
具体实施方式
下面结合附图对本发明的具体实施方式作进一步说明:
一种基于哈希的文件打包和读取方法,即是通过打包过程和读包过程进而完成对包内文件的写入与读取操作。
参照图1中的包文件,打包过程即将文件写入到包文件中的过程,其通过打包工具完成。打包工具接收如下输入信息:
1、所需打包的文件目录或文件列表;
2、所使用的哈希算法;
3、输出方式和输出位置。
参照图2,一种基于哈希的文件打包方法,所述打包方法包括以下步骤:
A、依次读取所需打包的文件;
打包工具根据输入信息,从磁盘上读取相应的文件,进而生成相应的文件包。所生成的文件包包含文件数据区和哈希表两个部分。文件数据区为包内文件存储提供场所,其中每个包内文件在文件数据区的位置称为此包内文件的偏移值。
B、计算上述文件路径的哈希值;
哈希表中保存每个哈希值和偏移值的对应关系,用于读包过程中对文件进行快速查找。
C、将文件写入包文件中的文件数据区。
D、将文件路径的哈希值与文件的偏移值写入包文件中的哈希表;
当所有文件都已经写入文件数据区且所有哈希值都不相同时候,则此时将哈希值作为哈希表的关键码。
E、判断是否读取完所有需打包的文件,若否,则继续执行步骤A,若是,则结束文件的打包。
若已经读取完所有需打包的文件,则文件打包过程结束,得到如图1所示的文件包。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于珠海金山网络游戏科技有限公司;成都西山居互动娱乐科技有限公司,未经珠海金山网络游戏科技有限公司;成都西山居互动娱乐科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210333907.0/2.html,转载请声明来源钻瓜专利网。