发明内容
本申请提供了一种数据压缩、解压方法及装置,以解决现有技术中不能对数据快速的压缩和解压的问题。
第一方面,本申请提供一种数据压缩方法,所述方法包括:
获取第一输入数据,分割成预设规格的所述第一输入数据,得到若干数据块;
将每个所述数据块压缩,得到若干压缩后数据和标记位,同时对每个所述数据块进行unit64转化后做hash操作,得到hash值和对应的偏移量;
将所述hash值和对应的偏移量存入hashtable中,并在所述hashtable中的最后一行对所有所述数据块对应的hash值进行拼接。
结合第一方面,在第一方面的第一种可实现方式中,所述将每个数据块进行压缩,得到压缩后的数据和标记位采用的方法为霍夫曼编码方法。
结合第一方面,在第一方面的第二种可实现方式中,所述在hashtable中的最后一行对所有所述数据块对应的hash值进行拼接的方法包括:
对所有所述数据块对应的hash值进行hash操作,偏移量设置为-1。
第二方面,本申请提供一种数据解压方法,所述方法包括:
获取第二输入数据,所述第二输入数据包括若干压缩后数据、标记位和hashtable;
获取一个压缩后数据,根据所述标记位,将所述压缩后数据还原,得到数据块;
统计数据块的数量;
判断所述数据块的数量是否大于预设数据块数量;
如果所述数据块的数量不大于预设数据块数量,则获取下一个压缩后数据,重复执行根据标记位,将所述压缩后数据还原,得到数据块的步骤;
如果所述数据块的数量大于预设数据块数量,则将按照还原顺序得到的所述数据块,与在所述hashtable中的hash值比较,判断hashtable中是否存在与所述数据块对应的hash值;
如果存在与所述数据块对应的hash值,则将所述数据块写入内存,统计所述内存中数据块的数量,判断所述内存中数据块的数量是否等于所述hashtable中的hash值的数量;
如果所述内存中数据块的数量不等于所述hashtable中的hash值的数量,则获取下一个数据块,重复执行hashtable中是否存在与所述数据块对应的hash值的步骤;
如果所述内存中数据块的数量等于所述hashtable中的hash值的数量,则判断所述内存中数据块是否和hashtable中最后一行的所有hash值拼接得到的拼接内容相匹配;
如果与拼接内容相匹配,则解压成功,将所述内存中的数据块返回。
结合第二方面,在第二方面的第一种可实现方式中,所述方法还包括:如果不存在与所述数据块对应的hash值,则返回所述数据块对应的偏移量,并将与所述数据块放入第一进程,判断是否存在与所述数据块对应的hashtable中的hash值;
如果存在与所述数据块对应的hashtable中的hash值,则根据偏移量,将所述数据块写入内存。
结合第二方面的第二种可实现方式,在第二方面的第三种可实现方式中,所述方法还包括:
如果不存在与所述数据块对应的hashtable中的hash值,则统计重新匹配次数,判断重新匹配次数是否大于预设重新匹配次数;
如果大于预设重新匹配次数,则解压失败;
如果不大于预设重新匹配次数,则重复执行判断是否存在与所述数据块对应的hashtable中的hash值的步骤。
结合第二方面,在第二方面的第四种可实现方式中,所述方法还包括:判断所述数据块的数据大小是否等于预设规格;如果不等于预设规格,则解压失败。
第三方面,本申请提供一种数据压缩装置,所述装置包括:
第一获取单元,用于获取第一输入数据,分割成预设规格的所述第一输入数据,得到若干数据块;
压缩单元,用于将每个所述数据块压缩,得到若干压缩后数据和标记位,同时对每个所述数据块进行unit64转化后做hash操作,得到hash值和对应的偏移量;
存入单元,用于将所述hash值和对应的偏移量存入hashtable中,并在所述hashtable中的最后一行对所有所述数据块对应的hash值进行拼接。
第四方面,本申请提供一种数据解压装置,所述装置包括:
第二获取单元,用于获取第二输入数据,所述第二输入数据包括若干压缩后数据、标记位和hashtable;
第三获取单元,用于获取一个压缩后数据,根据所述标记位,将所述压缩后数据还原,得到数据块;
第一统计单元,用于统计数据块的数量;
第一判断单元,用于判断所述数据块的数量是否大于预设数据块数量;
第四获取单元,用于如果所述数据块的数量不大于预设数据块数量,则获取下一个压缩后数据,重复执行根据标记位,将所述压缩后数据还原,得到数据块的步骤;
第二判断单元,用于如果所述数据块的数量大于预设数据块数量,则将按照还原顺序得到的所述数据块,与在所述hashtable中的hash值比较,判断hashtable中是否存在与所述数据块对应的hash值;
第二统计单元,用于如果存在与所述数据块对应的hash值,则将所述数据块写入内存,统计所述内存中数据块的数量,判断所述内存中数据块的数量是否等于所述hashtable中的hash值的数量;
第五获取单元,用于如果所述内存中数据块的数量不等于所述hashtable中的hash值的数量,则获取下一个数据块,重复执行hashtable中是否存在与所述数据块对应的hash值的步骤;
第三判断单元,用于如果所述内存中数据块的数量等于所述hashtable中的hash值的数量,则判断所述内存中数据块是否和hashtable中最后一行的所有hash值拼接得到的拼接内容相匹配;
返回单元,用于如果与拼接内容相匹配,则解压成功,将所述内存中的数据块返回。
由以上技术方案可知,本申请的一种数据压缩、解压方法及装置,在数据压缩方法中,通过对第一数据数据分割得到若干数据块,对数据块压缩得到压缩后数据和标记位,同时对数据块转化后做hash操作最终得到hashtable。在数据解压的方法中,对压缩后数据解压的同时,对数据块进行校验。这样在平衡速度与压缩率的同时,通过数据块与hashtable中hash值进行对比,确认最后数据的准确无误,实现数据的完整性与不可篡改性。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。以下结合附图,详细说明本申请各实施例提供的技术方案。
现有技术中,最常用的数据压缩算法主要有GZIP,LZO和Snappy算法,但是三者均有较大的缺陷,均不能具有高压缩率的同时,具有较快的压缩和解压数据。
请参阅图1,为本申请提供的一种数据压缩方法第一实施例的流程图,所述方法包括:
步骤S101、获取第一输入数据,分割成预设规格的所述第一输入数据,得到若干数据块;
需要说明的是,本申请实施例将所述第一输入数据分块,这样比直接对整体的第一输入数据进行压缩的方法效率更高,缩短了压缩时间。
另外,本申请实施例中的预设规格可以为64k。
步骤S102、将每个所述数据块压缩,得到若干压缩后数据和标记位,同时对每个所述数据块进行unit64转化后做hash操作,得到hash值和对应的偏移量;
步骤S103、将所述hash值和对应的偏移量存入hashtable(中文:hash表)中,并在所述hashtable中的最后一行对所有所述数据块对应的hash值进行拼接。
具体的,所述数据块逐个字节向后压缩,得到压缩后数据和标记位。同时,每个数据块先进行unit64转化后做hash操作,随后每个数据块均得到对应的hash值和偏移量,将hash值和偏移量存入hashtable。在对压缩后数据解压的过程中对解压得到的数据块需要与hashtable中的hash值比较,这样可以保证解压得到的数据块与压缩前的数据块相同,实现数据校验的目的。另外,在hashtable中的最后一行对所有数据块对应的hash值拼接,可以在解压的过程中验证数据是否被篡改。
由以上实施例可知,本申请的一种数据压缩方法第一实施例,所述方法包括:步骤S101、获取第一输入数据,分割成预设规格的所述第一输入数据,得到若干数据块;步骤S102、将每个所述数据块压缩,得到若干压缩后数据和标记位,同时对每个所述数据块进行unit64转化后做hash操作,得到hash值和对应的偏移量;步骤S103、将所述hash值和对应的偏移量存入hashtable中,并在所述hashtable中的最后一行对所有所述数据块对应的hash值进行拼接。本申请实施例中hashtable中存有若干hash值和偏移量,同时在hashtable中的最后一行对所有hash值拼接,可以方便在解压时对数据的验证。
本申请提供的一种数据压缩方法第二实施例,所述将每个数据块进行压缩,得到压缩后的数据和标记位采用的方法为霍夫曼编码方法。
霍夫曼编码,又称哈夫曼编码,是一种编码方式,霍夫曼编码是可变字长编码(VLC)的一种。该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码。
本申请提供的一种数据压缩方法第三实施例,所述在hashtable中的最后一行对所有所述数据块对应的hash值进行拼接的方法包括:
对所有所述数据块对应的hash值进行hash操作,偏移量设置为-1。
具体的,本申请实施例在hashtable中的最后一行对所有hash值拼接,使用的拼接方法为对所有hash值进行hash操作,并将偏移量设置为-1,拼接后得到的内容可以便于对解压后得到的数据块进行验证,确认数据块是否被篡改。
由以上实施例可知,本申请的一种数据压缩方法第三实施例,所述在hashtable中的最后一行对所有所述数据块对应的hash值进行拼接的方法包括:对所有所述数据块对应的hash值进行hash操作,偏移量设置为-1。拼接后的内容可以验证数据块内容是否被篡改,可以提高解压的准确性。
参阅图2,为本申请提供的一种数据解压方法第一实施例的流程图,所述方法包括:
步骤S104、获取第二输入数据,所述第二输入数据包括若干压缩后数据、标记位和hashtable;
步骤S105、获取一个压缩后数据,根据所述标记位,将所述压缩后数据还原,得到数据块;
步骤S106、统计数据块的数量;
步骤S107、判断所述数据块的数量是否大于预设数据块数量;
步骤S108、如果所述数据块的数量不大于预设数据块数量,则获取下一个压缩后数据,重复执行根据标记位,将所述压缩后数据还原,得到数据块的步骤;
步骤S109、如果所述数据块的数量大于预设数据块数量,则将按照还原顺序得到的所述数据块,与在所述hashtable中的hash值比较,判断hashtable中是否存在与所述数据块对应的hash值;
具体的,解压时利用标记位,将压缩后数据还原。本申请实施例,为了保证鲁棒性,在恢复了预设数据块数量后,对数据块进行校验。本申请中,所述预设数据块数量可以为3个。校验时获取按照标记位还原顺序得到的首个数据块,判断hashtable中是否存在与校验的数据块对应的hash值。本申请实施例中的数据块在压缩后得到的压缩后数据即为hash值,所以在判断数据块是否与hashtable中hash值对应时,直接比较数据块对应的压缩后数据与hashtable中的hash值即可。
步骤S110、如果存在与所述数据块对应的hash值,则将所述数据块写入内存,统计所述内存中数据块的数量,判断所述内存中数据块的数量是否等于所述hashtable中的hash值的数量;
步骤S111、如果所述内存中数据块的数量不等于所述hashtable中的hash值的数量,则获取下一个数据块,重复执行hashtable中是否存在与所述数据块对应的hash值的步骤;
步骤S112、如果所述内存中数据块的数量等于所述hashtable中的hash值的数量,则判断所述内存中数据块是否和hashtable中最后一行的所有hash值拼接得到的拼接内容相匹配;
具体的,本申请实施例按照标记位还原顺序,获取下一个数据块,然后重复执行hashtable中是否存在与所述数据块对应的hash值的步骤,如果内存中数据块的数量等于hashtable中的hash值的数量,也就是将所有数据块全部执行过hashtable中是否存在与所述数据块对应的hash值的步骤,此时,将内存中数据块与hashtable中最后一行的拼接内容相匹配。
步骤S113、如果与拼接内容相匹配,则解压成功,将所述内存中的数据块返回。
需要说明的是,在所有数据块全部与hashtable中的hash值比较后,且全部比较成功,则数据块均转入内存中,此时,再次将内存中全部数据块对应的hash值与hashtable中最后一行的所有hash值拼接得到的拼接内容相匹配,如果内存中数据块对应的hash值与拼接内容匹配成功,说明数据块内容没有被篡改,数据是安全的。
本申请实施例整体采用流水线技术,在将压缩后数据还原的同时,完成数据块的校验,实现多条指令并行处理,极大的加快了解压的速度。
由以上实施例可知,本申请的一种数据解压方法第一实施例,将压缩后数据还原,得到数据块后,对数据块进行校验,首先通过数据块与所述hashtable中的hash值比较,如果数据块全部校验成功,将数据块转入内存。随后将内存中的数据块与hashtable中的最后一行的所有hash值拼接得到的拼接内容匹配,如果匹配成功,则解压成功。本申请实施例在对压缩后数据解压的同时,完成校验工作,这样提高了数据解压的准确率和安全性。
请参阅图3,为本申请提供的一种数据解压方法第二实施例的流程图,所述方法还包括:
步骤S114、如果不存在与所述数据块对应的hash值,则返回所述数据块对应的偏移量,并将与所述数据块放入第一进程,判断是否存在与所述数据块对应的hashtable中的hash值;
步骤S115、如果存在与所述数据块对应的hashtable中的hash值,则根据偏移量,将所述数据块写入内存。
具体的,步骤S109中判断hashtable中是否存在与所述数据块对应的hash值,如果不存在于所述数据块对应的hash值,则返回所述数据块对应的偏移量,并将数据块放入第一进程中,继续判断是否存在与数据块对应的hashtable中的hash值,如果存在与数据块对应的hashtable中的hash值,则根据偏移量,将所述数据块写入内存。
参阅图4,为本申请提供的一种数据解压方法第三实施例的流程图,所述方法还包括:
步骤S116、如果不存在与所述数据块对应的hashtable中的hash值,则统计重新匹配次数,判断重新匹配次数是否大于预设重新匹配次数;
步骤S117、如果大于预设重新匹配次数,则解压失败;
步骤S118、如果不大于预设重新匹配次数,则重复执行判断是否存在与所述数据块对应的hashtable中的hash值的步骤。
具体的,判断第一进程中的数据块是否存在与所述数据块对应的hashtable中的hash值时,不存在与所述数据块对应的hashtable中hash值,还可以持续的判断是否存在与数据块对应的hashtable中的hash值,如果多次判断后,还未找到对应的hash值,则解压失败。
本申请提供的一种数据解压方法第四实施例,所述方法还包括:判断所述数据块的数据大小是否等于预设规格;
如果不等于预设规格,则解压失败。
需要说明的是,由于压缩时是按照预设规格压缩的,如果将压缩后数据解压后得到的数据块不等于预设规格,则说明解压失败。
参阅图5,为本申请提供的一种数据压缩装置的结构示意图,所述装置包括:
第一获取单元101,用于获取第一输入数据,分割成预设规格的所述第一输入数据,得到若干数据块;
压缩单元102,用于将每个所述数据块压缩,得到若干压缩后数据和标记位,同时对每个所述数据块进行unit64转化后做hash操作,得到hash值和对应的偏移量;
存入单元103,用于将所述hash值和对应的偏移量存入hashtable中,并在所述hashtable中的最后一行对所有所述数据块对应的hash值进行拼接。
在本申请提供的一种数据压缩装置的另一实施例中,所述将每个数据块进行压缩,得到压缩后的数据和标记位采用的方法为霍夫曼编码方法。
在本申请提供的一种数据压缩装置的另一实施例中,所述存入单元包括:用于对所有所述数据块对应的hash值进行hash操作,偏移量设置为-1。
参阅图6,为本申请提供的一种数据解压装置的结构示意图,所述装置包括:
第二获取单元104,用于获取第二输入数据,所述第二输入数据包括若干压缩后数据、标记位和hashtable;
第三获取单元105,用于获取一个压缩后数据,根据所述标记位,将所述压缩后数据还原,得到数据块;
第一统计单元106,用于统计数据块的数量;
第一判断单元107,用于判断所述数据块的数量是否大于预设数据块数量;
第四获取单元108,用于如果所述数据块的数量不大于预设数据块数量,则获取下一个压缩后数据,重复执行根据标记位,将所述压缩后数据还原,得到数据块的步骤;
第二判断单元109,用于如果所述数据块的数量大于预设数据块数量,则将按照还原顺序得到的所述数据块,与在所述hashtable中的hash值比较,判断hashtable中是否存在与所述数据块对应的hash值;
第二统计单元110,用于如果存在与所述数据块对应的hash值,则将所述数据块写入内存,统计所述内存中数据块的数量,判断所述内存中数据块的数量是否等于所述hashtable中的hash值的数量;
第五获取单元111,用于如果所述内存中数据块的数量不等于所述hashtable中的hash值的数量,则获取下一个数据块,重复执行hashtable中是否存在与所述数据块对应的hash值的步骤;
第三判断单元112,用于如果所述内存中数据块的数量等于所述hashtable中的hash值的数量,则判断所述内存中数据块是否和hashtable中最后一行的所有hash值拼接得到的拼接内容相匹配;
返回单元113,用于如果与拼接内容相匹配,则解压成功,将所述内存中的数据块返回。
在本申请提供的一种数据解压装置的另一实施例中,所述装置还包括:第四判断单元,用于如果不存在与所述数据块对应的hash值,则返回所述数据块对应的偏移量,并将与所述数据块放入第一进程,判断是否存在与所述数据块对应的hashtable中的hash值;如果存在与所述数据块对应的hashtable中的hash值,则根据偏移量,将所述数据块写入内存。
在本申请提供的一种数据解压装置的另一实施例中,所述装置还包括:第三统计单元,用于如果不存在与所述数据块对应的hashtable中的hash值,则统计重新匹配次数,判断重新匹配次数是否大于预设重新匹配次数;如果大于预设重新匹配次数,则解压失败;如果不大于预设重新匹配次数,则重复执行判断是否存在与所述数据块对应的hashtable中的hash值的步骤。
在本申请提供的一种数据解压装置的另一实施例中,所述装置还包括:第五判断单元,用于判断所述数据块的数据大小是否等于预设规格;如果不等于预设规格,则解压失败。
在本申请提供的一种数据解压装置的另一实施例中,所述装置还包括:解压单元,用于如果与拼接内容不匹配,则解压失败。
具体实现中,本申请还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本发明提供的数据压缩和解压的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:Read-Only Memory,简称:ROM)或随机存储记忆体(英文:Random Access Memory,简称:RAM)等。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于用于身份认证的安全网络中间件及其实现方法和装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
以上所述的本申请实施方式并不构成对本申请保护范围的限定。