本发明涉及计算机,特别是涉及一种压缩和解压方法及装置。
背景技术:
1、目前的解压方法有很多,比如bunzip2、unzip、gunzip、uncompress、tar等,但这些方法在解压后会保留源文件,所以在升级解包过程中会至少需要比源文件大一倍的存储或内存空间,以至于对于那些剩余存储或内存空间比源文件两倍还小的设备将无法解压文件。而且目前的解压方法没有对解压后的文件逐个做完整性校验。
2、因此,目前的解压方法需要较大的存储或内存空间,若设备的内存空间小于源文件的两倍,则不能成功解压文件。而且没有对解压后的文件逐个做md5sum或sha256sum校验,无法保证文件内容的完整性。
技术实现思路
1、本发明提供了一种压缩和解压方法及装置,可以在解压时节省内存,保证解压后文件的完整性。
2、为了解决上述技术问题,本发明的第一实施例提供了一种压缩方法,包括:
3、确定每个待压缩文件的大小;
4、将每个待压缩文件以预设的大小切割成若干个文件块;
5、逐个读取每个待压缩文件的若干个文件块,并将读取到的文件块写入压缩包的文件内容区,生成每个写入文件在文件内容区中所对应的位置偏移信息;
6、待所有待压缩文件的文件块都被写入压缩包的文件内容区后,生成压缩包;其中,所述压缩包按序依次设置有所述文件内容区、文件数量区、文件信息区和文件包信息区;所述文件信息区记录了每个写入文件的类型、版本、名称、md5sum、偏移位置和大小,所述文件包信息区记录了压缩包的文件包版本信息、文件包特性和文件包大小。
7、本发明将每个待压缩文件按固定的大小分割成若干个文件块,将每个待压缩文件的文件块按顺序写入文件内容区,待压缩文件都被写入文件内容区,生成设置了文件内容区、文件数量区、文件信息区和文件包信息区的压缩包,改进了压缩方法,可以快速清晰地得知压缩包内的文件内容和文件信息。
8、进一步地,所述将读取到的文件块写入压缩包的文件内容区,生成每个写入文件在文件内容区中所对应的位置偏移信息,具体为:
9、将每个待压缩文件的文件块写入压缩包的文件内容区,形成若干个写入文件;
10、记录每个写入文件在压缩包的位置,确定每个写入文件的偏移位置;
11、确定每个写入文件的大小为对应的待压缩文件的大小。。
12、本发明在将每个待压缩文件写入文件内容区时,会记录它们在文件内容区的位置,以此得到每个文件的偏移位置和大小,以保证在解压文件包时可以根据这些信息准确截取文件,避免损坏压缩的文件。
13、进一步地,所述待所有待压缩文件的文件块都被写入压缩包的文件内容区后,具体为:
14、将文件数量写入压缩包的文件数量区,并将每个写入文件的文件信息写入压缩包的文件信息区;
15、计算文件内容区、文件数量区、文件信息区和文件包信息区的大小总和,确定压缩包的文件包大小;
16、读取压缩包的文件包版本信息和文件包特性,并将压缩包的文件包大小、文件包版本信息和文件包特性写入压缩包的文件包信息区。
17、本发明在所有待压缩文件都写入压缩包后,会将文件数量和文件信息分别存在压缩包的文件数量区和文件信息区,将整个压缩包的有关信息存在文件包信息区,保证压缩包的信息完整,也为后续的解压提供了便利。
18、进一步地,所述将每个写入文件的文件信息写入压缩包的文件信息区,具体为:
19、读取每个写入文件的类型、版本和名称;
20、利用md5算法获取每个写入文件的md5sum;
21、根据每个写入文件的位置偏移信息,获取每个写入文件的偏移位置和大小;
22、根据每个写入文件的类型、版本、名称、md5sum、偏移位置和大小,生成每个写入文件的文件信息;
23、获取所有写入文件的文件信息,将每个写入文件的文件信息写入压缩包的文件信息区。
24、本发明的每个写入文件的文件信息是由文件的类型、版本、名称、md5sum、偏移位置和大小构成的,其中文件的类型、版本和名称是文件压缩时用户输入的,md5sum由md5算法通过计算得到,偏移位置和大小根据文件的位置偏移信息获得,每个文件的文件信息结构和长度都固定,可以方便后续对文件信息区进行解析。
25、进一步地,所述将每个待压缩文件以预设的大小切割成若干个文件块,具体为:
26、按预设的大小从每个文件的末尾向前依次切割,形成若干个文件块,并将所述若干个文件块做加密处理。
27、本发明在切割需要压缩的文件时,会对切割好的文件块做加密处理,提高压缩文件的安全性和保密性。
28、相应的,本发明第一实施例提供了一种压缩装置,包括:确定模块、切割模块、写入模块和生成模块;
29、所述确定模块用于确定每个待压缩文件的大小;
30、所述切割模块用于将每个待压缩文件以预设的大小切割成若干个文件块;
31、所述写入模块用于逐个读取每个待压缩文件的若干个文件块,并将读取到的文件块写入压缩包的文件内容区,生成每个写入文件在文件内容区中所对应的位置偏移信息;
32、所述生成模块用于待所有待压缩文件的文件块都被写入压缩包的文件内容区后,生成压缩包;其中,所述压缩包按序依次设置有所述文件内容区、文件数量区、文件信息区和文件包信息区;所述文件信息区记录了每个写入文件的类型、版本、名称、md5sum、偏移位置和大小,所述文件包信息区记录了压缩包的文件包版本信息、文件包特性和文件包大小。
33、进一步地,所述生成模块,包括:第一写入单元、计算单元和第二写入单元;
34、所述第一写入单元用于将文件数量写入压缩包的文件数量区,并将每个写入文件的文件信息写入压缩包的文件信息区;
35、所述计算单元用于计算文件内容区、文件数量区、文件信息区和文件包信息区的大小总和,确定压缩包的文件包大小;
36、所述第二写入单元用于读取压缩包的文件包版本信息和文件包特性,并将压缩包的文件包大小、文件包版本信息和文件包特性写入压缩包的文件包信息区。
37、本发明第一实施例将待压缩文件按固定的大小分割成若干个文件块,将每个文件的文件块按顺序写入文件内容区,文件压缩后,将文件数量和文件信息分别存在压缩包的文件数量区和文件信息区,并将整个压缩包的有关信息存在文件包信息区,形成压缩包;本发明改进了压缩方法,可以快速清晰地得知压缩包内的文件内容和文件信息。
38、本发明第二实施例提供了一种解压方法,包括:
39、获取待解压的第一压缩包;其中,所述第一压缩包按序依次设置有文件内容区、文件数量区、文件信息区和文件包信息区;所述文件信息区记录了每个待解压文件的类型、版本、名称、md5sum、偏移位置和大小,所述文件包信息区记录了第一压缩包的文件包版本信息、文件包特性和文件包大小;
40、截取第一压缩包的文件数量区、文件信息区和文件包信息区,并将所述文件数量区、文件信息区和文件包信息区保存至内存中;
41、在第一压缩包的文件信息区读取每个待解压文件的大小和偏移位置;
42、根据所述每个待解压文件的大小和偏移位置,在第一压缩包的文件内容区逐个截取待解压文件,解压第一压缩包内的所有待解压文件;
43、对每个解压后文件进行解密处理,并将每个解压后文件保存在目标文件中;
44、对每个解压后文件做md5码检验。
45、本发明在进行解压时,先截取待解压压缩包的文件数量区、文件信息区和文件包信息区,将这三部分保存在内存里,再根据文件信息区的信息,按顺序在文件内容区逐个截取文件,截取后的文件经过解密后保存在目标文件中,并对解压出的文件做md5检验,每次在压缩包里截取内容,压缩包的大小可以相应减小,压缩包所占用的存储或内存空间也会减小,在解压完成后使用md5检验,可以保证解压后文件的完整性。
46、进一步地,所述对每个解压后文件做md5码检验,具体为:
47、若md5校验成功,则确定解压后文件完整;
48、若md5校验失败,则停止文件截取,删除已截取文件和未截取完成的文件,释放内存空间。
49、本发明在每个文件解压完成后,会使用md5算法检验文件的完整性,若校验失败,会及时停止文件截取,并删除已截取文件和未截取完成的文件,节省内存空间。
50、相应的,本发明第二实施例提供了一种解压装置,包括:获取模块、截取模块、读取模块、解压模块、解密模块和校验模块;
51、所述获取模块用于获取待解压的第一压缩包;其中,所述第一压缩包按序依次设置有文件内容区、文件数量区、文件信息区和文件包信息区;所述文件信息区记录了每个待解压文件的类型、版本、名称、md5sum、偏移位置和大小,所述文件包信息区记录了第一压缩包的文件包版本信息、文件包特性和文件包大小;
52、所述截取模块用于截取第一压缩包的文件数量区、文件信息区和文件包信息区,并将所述文件数量区、文件信息区和文件包信息区保存至内存中;
53、所述读取模块用于在第一压缩包的文件信息区读取每个待解压文件的大小和偏移位置;
54、所述解压模块用于根据所述每个待解压文件的大小和偏移位置,在第一压缩包的文件内容区逐个截取待解压文件,解压第一压缩包内的所有待解压文件;
55、所述解密模块用于对每个解压后文件进行解密处理,并将每个解压后文件保存在目标文件中;
56、所述校验模块用于对每个解压后文件做md5码检验。
57、本发明第二实施例在解压时,先在压缩包截取文件数量区、文件信息区和文件包信息区,将这三部分保存在内存里,再按顺序在文件内容区逐个截取文件,截取后的文件保存在目标文件中,每次在压缩包里截取内容,压缩包的大小可以相应减小,压缩包所占用的存储或内存空间也会减小;在解压完成后再使用md5检验,保证解压后文件的完整性。