一种文件解压缩的方法及装置与流程

文档序号:12362590阅读:261来源:国知局
一种文件解压缩的方法及装置与流程

本发明涉及解压缩技术领域,具体涉及一种文件解压缩的方法及装置。



背景技术:

为了节省存储资源或者节省网络带宽,目前数据压缩技术已经被广泛使用。

数据压缩是指在不丢失有用信息的前提下,缩减数据量以减少存储空间,提高其传输、存储和处理效率,或按照一定的算法对数据进行重新组织,减少数据的冗余和存储的空间的一种技术方法。

与数据压缩相对应的就是数据解压缩。在需要用到相应数据时,需要将该数据解压缩出来,数据解压缩就是将一个通过软件压缩的文档、文件等各种东西恢复到压缩之前的样子。

现有技术中,在数据解压缩时,解压缩方法经常与压缩包不匹配,导致解压缩过程中发生的读写(IO)操作的次数非常多,解压缩时间长,导致解压缩效率低下。



技术实现要素:

为解决现有技术中解压缩过程中IO操作的次数多的问题,本发明实施例提供一种文件解压缩的方法,可以对解压缩文件进行分类,然后选择合适的解压缩方法解压缩该文件压缩包,从而减少了IO操作的次数,减少了解压缩时间,提高了解压缩效率。本发明实施例还提供了相应的装置。

本发明第一方面提供一种文件解压缩的方法,包括:

从待解压缩的文件压缩包中读取中心目录记录结束符;

从所述中心目录记录结束符中读取所述文件压缩包中被压缩文件的数量;

若所述被压缩文件的数量大于第一阈值,则根据所述被压缩文件的数量,确定所述文件压缩包中被压缩文件的数据量均值;

根据所述被压缩的文件的数据量均值,确定与所述文件压缩包匹配的解压策略,并采用与所述文件压缩包匹配的解压策略解压缩所述文件压缩包。

本发明第二方面提供一种文件解压缩的装置,包括:

第一读取单元,用于从待解压缩的文件压缩包中读取中心目录记录结束符;

第二读取单元,用于从所述第一读取单元读取的所述中心目录记录结束符中读取所述文件压缩包中被压缩文件的数量;

第一确定单元,用于若所述被压缩文件的数量大于第一阈值,则根据所述第二读取单元读取的所述被压缩文件的数量,确定所述文件压缩包中被压缩文件的数据量均值;

第二确定单元,用于根据所述第一确定单元确定的被压缩的文件的数据量均值,确定与所述文件压缩包匹配的解压策略;

解压缩单元,用于采用所述第二确定单元确定的与文件压缩包匹配的解压策略解压缩所述文件压缩包。

与现有技术中解压缩过程中IO操作的次数多相比,本发明实施例提供一种文件解压缩的方法,可以对解压缩文件进行分类,然后选择合适的解压缩方法解压缩该文件压缩包,从而减少了IO操作的次数,减少了解压缩时间,提高了解压缩效率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例中文件压缩包的结构示意图;

图2是本发明实施例中文件压缩包的代码示意图;

图3是本发明实施例中文件解压缩的方法的一实施例示意图;

图4是本发明实施例中文件解压缩的装置的一实施例示意图;

图5是本发明实施例中文件解压缩的装置的另一实施例示意图。

具体实施方式

本发明实施例提供一种文件解压缩的方法,可以对解压缩文件进行分类,然后选择合适的解压缩方法解压缩该文件压缩包,从而减少了IO操作的次数,减少了解压缩时间,提高了解压缩效率。本发明实施例还提供了相应的装置。以下分别进行详细说明。

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

图1为本发明实施例中文件压缩包的结构示意图。

如图1所示,本发明实施例所提供的文件压缩包的结构可以包括各个文件的文件头和文件压缩数据,以及中心目录(Central Directory)和中心目录记录结束符。如图1所示,文件部分可以包括文件1、文件2、文件3…文件n,n为大于3的整数。其中,每个文件都包括文件头。中心目录中包括每个文件的描述信息,例如:每个文件的文件头信息和偏移信息等。中心目录记录结束符有22比特(bit),中心目录记录结束符的结构可以参阅表1进行理解。

表1:中心目录记录结束符的结构表

从表1可以读取出中心目录中所记录的文件压缩包中被压缩文件的数量,以及该中心目录的大小。

因中心目录记录结束符位于文件压缩包中最后的22个比特位,所以,可以通过第一次读取操作从待解压缩的文件压缩包中读取中心目录记录结束符,然后再从表1所示的中心目录记录结束符中读取所述文件压缩包中被压缩文件的数量,被压缩文件的数量就是表1中的中心目录的总记录数量。

若被压缩文件的数量大于第一阈值,则可以确认该文件压缩包中压缩多个文件,针对文件压缩包中有多个文件的解压方案,需要根据文件压缩包中各压缩文件的数据量均值来决定解压缩策略,因此,需要进一步确定文件压缩包中被压缩文件的数据量均值。第一阈值例如可以为50,该第一阈值的具体值在本发明实施例中不做限定,根据需求设置即可。

被压缩文件的数据量均值只的是被压缩文件的文件内容的数据量均值,因各文件名称的长度长短不一,如果将文件名称的数据量引入到均值计算中,会影响被压缩文件的数据量均值的准确性。

如图1所示,文件压缩包的总数据量包括:文件头的数据量、文件名称数据量、文件内容数据量、中心目录的数据量和中心目录记录结束符的数据量。

文件压缩包的总数据量可以很容易通过系统的接口函数得到,例如:用A表示被压缩文件的总压缩数据量,每个文件的文件头的数据量是固定的30bit,若用D表示文件头的数据量,则D=30bit,中心目录记录结束符的数据量为22bit,用B表示中心目录记录结束符的数据量,则B=22,中心目录的数据量用C表示,从表1中可以读取出该C的取值,也就是中心目录的大小。被压缩文件的数量用E就是表1中的中心目录的总记录数量,被压缩文件的文件名称总数据量用F表示,中心目录中记录有每个被压缩文件的文件名称的数据量,因此,只要将每个被压缩文件的文件名称的数据量读取出来相加即可得到F的值,所述被压缩文件的文件内容总压缩数据量用M表示。

因A=M+B+C+D*E+F,所以就可以得到M=A-B-C-D*E-F,因为B=22,D=30bit,所以就可以得到M=A-22-C-30*E-F。

因为A、C、E和F都是可以通过读取得到,或者通过读取相应数据后计算得到,因此可以求出M,被压缩文件的数据量均值=被压缩文件的文件内容总压缩数据量/被压缩文件的数量,即M/E。

若被压缩文件的数量较多,每个被压缩文件的文件名称的数据量都读取后再相加,无疑会增加操作时间,因此,可以设置第二阈值,例如第二阈值可以为60,当被压缩文件的数量少于60时,可以把每个被压缩文件的文件名称的数据量都读取出来再相加,以得到所有被压缩文件的文件名称总数据量。若被压缩文件的数量大于60时,可以只读取预置数量的文件名称的数据量,然后计算文件名称的数据量平均值,根据所述数据量平均值和所述被压缩文件的数量,确定所有被压缩文件的文件名称总数据量。预置数量可以与第二阈值相同,也可以与第二阈值不同。

图1是本发明实施例中文件压缩包的结构示意图,实际上,文件压缩包中的数据是二进制代码,因此,本发明实施例中给出了例如图2所示代码形式的文件压缩包的示意图。

如图2所示,最后22bit为中心目录记录结束符,其中标号101所指示的位置为中心目录的总记录数量,也就是被压缩文件的数量,标号102所指示的位置为中心目录的大小。标号103所指示的区域为中心目录区域,标号104所指示的区域为压缩文件区域。

关于文件头的长度为30bit可以参阅表2进行理解。

表2:文件头信息结构表

因为,从文件名称开始,就不作为固定的文件头了,所以,本发明实施例中,固定的文件头长度为30bit。

因为中心目录中的结构上有文件名称长度的字段,也就是每个文件名称的数据量,所以可以直接从中心目录上读取文件名称长度,包含文件名称长度的中心目录结构表可以参阅表3进行理解。

表3:中心目录结构表

从表3中可以读出各被压缩文件的文件名称长度,也就是文件名称的数据量。

按照以上方案确定被压缩的文件的数据量均值后,可以将数据量均值与第三阈值进行比较,第三阈值例如可以为1K,第三阈值的取值根据需求设置即可。

若所述被压缩的文件的数据量均值小于第三阈值,则确定与所述文件压缩包匹配的解压策略为ZipFileStream,并采用ZipFileStream解压缩所述文件压缩包;

若所述被压缩的文件的数据量均值大于第三阈值,则确定与所述文件压缩包匹配的解压策略为ZipFile,并采用ZipFile解压缩所述文件压缩包。

本发明实施例中,在解压缩前先对文件压缩包进行归类,根据文件压缩包中的被压缩文件的数量和被压缩的文件的数据量均值再为该文件压缩包选择合适的解压策略,可以有效的减少解压缩过程中IO操作的次数,减少解压缩的时间,从而提高解压缩的效率。

例如:针对本发明实施例的一个仿真数据统计,针对同一个文件压缩包,其中包括了大量的小文件,而且每个小文件的数据量均值都小于第三阈值,如果选择ZipFile解压缩,则需要发生507次IO操作,需要花费1982ms才能完成解压缩,而如果选中ZipFileStream解压缩,则只需发生7次IO操作,714ms就可以完成解压缩。从仿真数据的对比中可以看出,为一个文件压缩包选择合适的解压缩策略进行解压缩,大大的减少了解压缩过程中IO操作的次数,减少解压缩的时间,从而提高解压缩的效率。

参阅图3,本发明实施例提供的文件解压缩的方法的一实施例包括:

201、从待解压缩的文件压缩包中读取中心目录记录结束符。

202、从所述中心目录记录结束符中读取所述文件压缩包中被压缩文件的数量。

203、若所述被压缩文件的数量大于第一阈值,则根据所述被压缩文件的数量,确定所述文件压缩包中被压缩文件的数据量均值。

204、根据所述被压缩的文件的数据量均值,确定与所述文件压缩包匹配的解压策略,并采用与所述文件压缩包匹配的解压策略解压缩所述文件压缩包。

与现有技术中解压缩过程中IO操作的次数多相比,本发明实施例提供一种文件解压缩的方法,可以对解压缩文件进行分类,然后选择合适的解压缩方法解压缩该文件压缩包,从而减少了IO操作的次数,减少了解压缩时间,提高了解压缩效率。

可选地,所述根据所述被压缩文件的数量,确定所述文件压缩包中被压缩文件的数据量均值,可以包括:

确定所述被压缩文件的文件内容总压缩数据量;

根据所述文件内容总压缩数据量和所述被压缩文件的数量,确定所述文件压缩包中被压缩文件的数据量均值。

可选地,所述确定所述被压缩文件的文件内容总压缩数据量,可以包括:

确定所述被压缩文件的总压缩数据量A、所述中心目录记录结束符的数据量B、中心目录的数据量C、文件头的数据量D、被压缩文件的数量E,以及确定所有被压缩文件的文件名称总数据量F;

根据如下公式确定所述被压缩文件的文件内容总压缩数据量M:

M=A-B-C-D*E-F。

可选地,所述确定所有被压缩文件的文件名称总数据量,包括:

若所述被压缩文件的数量大于第二阈值,则获取预置数量的文件名称的数据量,以计算文件名称的数据量平均值,根据所述数据量平均值和所述被压缩文件的数量,确定所有被压缩文件的文件名称总数据量,所述第二阈值大于所述第一阈值;

若所述被压缩文件的数量小于第二阈值,则将每个被压缩文件的文件名称的数据量相加,以得到所有被压缩文件的文件名称总数据量。

可选地,所述根据所述被压缩的文件的数据量均值,确定与所述文件压缩包匹配的解压策略,并采用与所述文件压缩包匹配的解压策略解压缩所述文件压缩包,可以包括:

若所述被压缩的文件的数据量均值小于第三阈值,则确定与所述文件压缩包匹配的解压策略为ZipFileStream,并采用ZipFileStream解压缩所述文件压缩包;

若所述被压缩的文件的数据量均值大于第三阈值,则确定与所述文件压缩包匹配的解压策略为ZipFile,并采用ZipFile解压缩所述文件压缩包。

以上图3所对应文件解压缩的方法的实施例以及任一可选实施例可以参阅图1和图2以及表至表3所对应的描述进行理解,本处不再重复赘述。

以上是对文件解压缩的方法的描述,下面结合附图描述本发明实施例中的文件解压缩的装置。

如图4所示,本发明实施例所提供的文件解压缩的装置30的一实施例包括:

第一读取单元301,用于从待解压缩的文件压缩包中读取中心目录记录结束符;

第二读取单元302,用于从所述第一读取单元301读取的所述中心目录记录结束符中读取所述文件压缩包中被压缩文件的数量;

第一确定单元303,用于若所述被压缩文件的数量大于第一阈值,则根据所述第二读取单元302读取的所述被压缩文件的数量,确定所述文件压缩包中被压缩文件的数据量均值;

第二确定单元304,用于根据所述第一确定单元303确定的被压缩的文件的数据量均值,确定与所述文件压缩包匹配的解压策略;

解压缩单元305,用于采用所述第二确定单元302确定的与文件压缩包匹配的解压策略解压缩所述文件压缩包。

本发明实施例中,第一读取单元301从待解压缩的文件压缩包中读取中心目录记录结束符;第二读取单元302从所述第一读取单元301读取的所述中心目录记录结束符中读取所述文件压缩包中被压缩文件的数量;第一确定单元303若所述被压缩文件的数量大于第一阈值,则根据所述第二读取单元302读取的所述被压缩文件的数量,确定所述文件压缩包中被压缩文件的数据量均值;第二确定单元304根据所述第一确定单元303确定的被压缩的文件的数据量均值,确定与所述文件压缩包匹配的解压策略;解压缩单元305采用所述第二确定单元302确定的与文件压缩包匹配的解压策略解压缩所述文件压缩包。与现有技术中解压缩过程中IO操作的次数多相比,本发明实施例提供一种文件解压缩的装置,可以对解压缩文件进行分类,然后选择合适的解压缩方法解压缩该文件压缩包,从而减少了IO操作的次数,减少了解压缩时间,提高了解压缩效率。

可选地,所述第一确定单元303用于:

确定所述被压缩文件的文件内容总压缩数据量;

根据所述文件内容总压缩数据量和所述被压缩文件的数量,确定所述文件压缩包中被压缩文件的数据量均值。

可选地,所述第一确定单元303用于:

确定所述被压缩文件的总压缩数据量A、所述中心目录记录结束符的数据量B、中心目录的数据量C、文件头的数据量D、被压缩文件的数量E,以及确定所有被压缩文件的文件名称总数据量F;

根据如下公式确定所述被压缩文件的文件内容总压缩数据量M:

M=A-B-C-D*E-F。

可选地,所述第一确定单元303用于:

若所述被压缩文件的数量大于第二阈值,则获取预置数量的文件名称的数据量,以计算文件名称的数据量平均值,根据所述数据量平均值和所述被压缩文件的数量,确定所有被压缩文件的文件名称总数据量,所述第二阈值大于所述第一阈值;

若所述被压缩文件的数量小于第二阈值,则将每个被压缩文件的文件名称的数据量相加,以得到所有被压缩文件的文件名称总数据量。

可选地,所述第二确定单元304,用于若所述被压缩的文件的数据量均值小于第三阈值,则确定与所述文件压缩包匹配的解压策略为ZipFileStream;

所述解压缩单元305,用于采用ZipFileStream解压缩所述文件压缩包;

所述第二确定单元304,用于若所述被压缩的文件的数据量均值大于第三阈值,则确定与所述文件压缩包匹配的解压策略为ZipFile;

所述解压缩单元305,用于采用ZipFile解压缩所述文件压缩包。

以上图4所对应的文件解压缩的装置实施例以及任一可选实施例可以参阅图1和图2以及表至表3所对应的描述进行理解,本处不再重复赘述。

图5是本发明实施例提供的文件压缩的装置30的结构示意图。所述文件压缩的装置30包括处理器310、存储器350和收发器330,存储器350可以包括只读存储器和随机存取存储器,并向处理器310提供操作指令和数据。存储器350的一部分还可以包括非易失性随机存取存储器(NVRAM)。

在一些实施方式中,存储器350存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:

在本发明实施例中,通过调用存储器350存储的操作指令(该操作指令可存储在操作系统中),

从待解压缩的文件压缩包中读取中心目录记录结束符;

从所述中心目录记录结束符中读取所述文件压缩包中被压缩文件的数量;

若所述被压缩文件的数量大于第一阈值,则根据所述被压缩文件的数量,确定所述文件压缩包中被压缩文件的数据量均值;

根据所述被压缩的文件的数据量均值,确定与所述文件压缩包匹配的解压策略,并采用与所述文件压缩包匹配的解压策略解压缩所述文件压缩包。

与现有技术中解压缩过程中IO操作的次数多相比,本发明实施例提供一种文件解压缩的方法,可以对解压缩文件进行分类,然后选择合适的解压缩方法解压缩该文件压缩包,从而减少了IO操作的次数,减少了解压缩时间,提高了解压缩效率。

处理器310控制文件压缩的装置30的操作,处理器310还可以称为CPU(Central Processing Unit,中央处理单元)。存储器350可以包括只读存储器和随机存取存储器,并向处理器310提供指令和数据。存储器350的一部分还可以包括非易失性随机存取存储器(NVRAM)。具体的应用中文件压缩的装置30的各个组件通过总线系统320耦合在一起,其中总线系统320除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统320。

上述本发明实施例揭示的方法可以应用于处理器310中,或者由处理器310实现。处理器310可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器310中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器310可以是通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现成可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器350,处理器310读取存储器350中的信息,结合其硬件完成上述方法的步骤。

可选地,处理器310用于:

确定所述被压缩文件的文件内容总压缩数据量;

根据所述文件内容总压缩数据量和所述被压缩文件的数量,确定所述文件压缩包中被压缩文件的数据量均值。

可选地,处理器310用于:

确定所述被压缩文件的总压缩数据量A、所述中心目录记录结束符的数据量B、中心目录的数据量C、文件头的数据量D、被压缩文件的数量E,以及确定所有被压缩文件的文件名称总数据量F;

根据如下公式确定所述被压缩文件的文件内容总压缩数据量M:

M=A-B-C-D*E-F。

可选地,处理器310用于:

若所述被压缩文件的数量大于第二阈值,则获取预置数量的文件名称的数据量,以计算文件名称的数据量平均值,根据所述数据量平均值和所述被压缩文件的数量,确定所有被压缩文件的文件名称总数据量,所述第二阈值大于所述第一阈值;

若所述被压缩文件的数量小于第二阈值,则将每个被压缩文件的文件名称的数据量相加,以得到所有被压缩文件的文件名称总数据量。

可选地,处理器310用于:

若所述被压缩的文件的数据量均值小于第三阈值,则确定与所述文件压缩包匹配的解压策略为ZipFileStream,并采用ZipFileStream解压缩所述文件压缩包;

若所述被压缩的文件的数据量均值大于第三阈值,则确定与所述文件压缩包匹配的解压策略为ZipFile,并采用ZipFile解压缩所述文件压缩包。

以上的文件压缩的装置30可以参阅图1至图4部分的描述进行理解,本处不做过多赘述

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:ROM、RAM、磁盘或光盘等。

以上对本发明实施例所提供的文件解压缩的方法以及装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1