一种通用信息的无损压缩与解压缩方法

文档序号:7518233阅读:222来源:国知局
专利名称:一种通用信息的无损压缩与解压缩方法
技术领域
本发明涉及一种数据的无损压缩与解压缩方法,具体涉及一种通用信息的无损压 缩与解压缩方法。
背景技术
无损压缩是利用数据的统计冗余进行压缩,可完全回复原始数据而不引起任何失 真。当今,各种信息系统的数据量越来越大,如何更快、更多、更好地传输与无损存储数据成 为数据信息处理的首要问题,而数据无损压缩技术则是解决这一问题的重要方法。数据无损压缩技术早已应用于各个领域,但压缩率是受到数据统计冗余度的理论 限制,目前流行的Winzip.Winrar等软件压缩后的信息,都不能进行再次无损压缩。

发明内容
本发明要解决的技术问题是提供一种不仅对常见的文件格式数据能够无损压缩, 而且对已经经过常用压缩软件压缩过的数据信息也能进一步再压缩的压缩与解压缩方法; 由本发明所述压缩方法压缩得到的文件所占用空间更小。为解决上述技术问题,本发明采用以下技术方案一种通用信息的无损压缩方法,其步骤如下1)以二进制方式读取源文件,所得二进制序列存入新建数组A中,将数组A中的第 一位二进制代码存入变量a中;2)用数组A中“持续0直至下一位是1”的长度替换“持续0直至下一位是1”中 所出现的所有的“0”;用数组A中“持续1直至下一位是0”的长度替换“持续1直至下一位 是0”中所出现的所有的“1”,所得序列存入新建数组B中;3)统计数组B中出现的不同的元素,将这些不同的元素按出现的顺序存入新建数 组C中;4)将数组C中的元素按升序排序,排序后的序列存入新建数组D中;5)将数组D中第η个元素值使用数字η代替,所得序列存入新建数组E中;6)将数组D中元素和数组E中元素按照一一对应的关系,对数组B中所有的元素 进行替换,所得序列存入新建数组F中;7)将数组F中所有元素做上述第1)步骤的反变换,其中数组F中的第一位代码为 变量a中所存的代码,反变换后的二进制代码序列存入新建数组G中;8)将数组D中元素进行“后项减去相邻前项”处理,结果存入新建数组H中,寻找 数组H中第一个大于或等于2的元素位置,设此元素在数组H中的位置为n,将数组D中前 η个元素全部删除,剩余的元素顺序存入新建数组I中;9)保存数组I和G为二进制文件,此二进制文件即为源文件无损压缩后的文件。其中步骤5)中,数字η以1开始计数。
步骤8)中,元素位置η以1开始计数。步骤1)中,所述源文件可为未经压缩软件压缩过的数据信息,即常见的文件格式 数据,还可以是经PAQ,winrk, ffinzip, winrar等压缩软件压缩过的数据信息。本发明所述的通用信息的解压缩方法,其步骤如下1)读取数组G中的二进制序列,将数组G中第一位二进制代码存入变量g中;2)用数组A中“持续0直至下一位是1”的长度替换“持续0直至下一位是1”中 所出现的所有的“0”;用数组A中“持续1直至下一位是0”的长度替换“持续1直至下一位 是0”中所出现的所有的“ 1 ”,所得序列存入新建数组F中;3)统计数组F中出现的不同的元素及,将这些不同的元素按出现的顺序存入新建 数组E中;4)将数组E中的元素按升序排序,排序后的序列存入新建数组D中;5)读取数组I,设数组I中共有i个元素,将数组D中后i个元素使用数组I中的 元素替换,替换后的序列存入新建数组C中;6)将数组D中元素和数组C中元素按照一一对应的关系,对数组F中所有的元素 进行替换,所得序列存入新建数组B中;7)将数组B中所有元素做上述第1)步骤的反变换,其中数组B中的第一位代码 为变量g中所存的代码,反变换后的二进制代码序列存入新建数组A中,将数组A保存为文 件,该文件即为源文件。与现有技术相比,本发明所述压缩方法不仅可对常见的文件格式数据进行无损压 缩,而且对已经经过常用压缩软件压缩过的数据信息也能进一步再压缩,使压缩得到的文 件所占用空间更小,可在原有的压缩比的基础上再去除1 80%的冗余(去除的冗余量情 况视文件内部数据冗余不同而不同),而且本发明所述压缩方法算法简单,易于实现。


图1为对源文件进行无损压缩的流程图;图2为对压缩文件进行解压缩的流程图。图中标号为101、以二进制方式读取源文件,所得二进制序列存入新建数组A中,将数组A中的 第一位二进制代码存入变量a中;102、用数组A中“持续0直至下一位是1”的长度替换“持续0直至下一位是1”中 所出现的所有的“0”;用数组A中“持续1直至下一位是0”的长度替换“持续1直至下一位 是0”中所出现的所有的“1”,所得序列存入新建数组B中;103、统计数组B中出现的不同的元素,将这些不同的元素按出现的顺序存入新建 数组C中;104、将数组C中的元素按升序排序,排序后的序列存入新建数组D中;105、将数组D中第η个元素值使用数字η代替,所得序列存入新建数组E中;106、将数组D中元素和数组E中元素按照一一对应的关系,对数组B中所有的元 素进行替换,所得序列存入新建数组F中;107、将数组F中所有元素做上述第1)步骤的反变换,其中数组F中的第一位代码
4为变量a中所存的代码,反变换后的二进制代码序列存入新建数组G中;108、将数组D中元素进行“后项减去相邻前项”处理,结果存入新建数组H中,寻 找数组H中第一个大于或等于2的元素位置,设此元素在数组H中的位置为n,将数组D中 前η个元素全部删除,剩余的元素顺序存入新建数组I中;109、保存数组I和G为二进制文件,此二进制文件即为源文件无损压缩后的文件。201、读取数组G中的二进制序列,将数组G中第一位二进制代码存入变量g中;202、用数组A中“持续0直至下一位是1”的长度替换“持续0直至下一位是1”中 所出现的所有的“0”;用数组A中“持续1直至下一位是0”的长度替换“持续1直至下一位 是0”中所出现的所有的“ 1 ”,所得序列存入新建数组F中;203、统计数组F中出现的不同的元素及,将这些不同的元素按出现的顺序存入新 建数组E中;204、将数组E中的元素按升序排序,排序后的序列存入新建数组D中;205、读取数组I,设数组I中共有i个元素,将数组D中后i个元素使用数组I中 的元素替换,替换后的序列存入新建数组C中;206、将数组D中元素和数组C中元素按照一一对应的关系,对数组F中所有的元 素进行替换,所得序列存入新建数组B中;207、将数组B中所有元素做上述第1)步骤的反变换,其中数组B中的第一位代码 为变量g中所存的代码,反变换后的二进制代码序列存入新建数组A中,将数组A保存为文 件,该文件即为源文件。
具体实施例方式图1为本发明所述压缩方法对源文件进行无损压缩的流程图。如图1所示,压缩 的步骤为对将要进行压缩的文件以二进制方式读出,所得二进制序列存入新建数组A中, 将数组A中的第一位二进制代码存入变量a中(步骤101);用数组A中“持续0直至下一 位是1”的长度替换“持续0直至下一位是1”中所出现的所有的“0” ;用数组A中“持续1 直至下一位是0”的长度替换“持续1直至下一位是0”中所出现的所有的“1”,所得序列存 入新建数组B中(步骤102);然后统计数组B中出现的不同的元素,将这些不同的元素按出 现的顺序存入新建数组C中(步骤103);将数组C中的元素按升序排序,排序后的序列存 入新建数组D中(步骤104);再将数组D中第η个元素值使用数字η代替,所得序列存入 新建数组E中,其中数字η以1开始计数(步骤105);之后,将数组D中元素和数组E中元 素按照一一对应的关系,对数组B中所有的元素进行替换,所得序列存入新建数组F中(步 骤106);将数组F中所有元素做上述第1)步骤的反变换,其中数组F中的第一位代码为变 量a中所存的代码,反变换后的二进制代码序列存入新建数组G中(步骤107);最后,将数 组D中元素进行“后项减去相邻前项”处理,结果存入新建数组H中,寻找数组H中第一个 大于或等于2的元素位置,设此元素在数组H中的位置为n,将数组D中前η个元素全部删 除,剩余的元素顺序存入新建数组I中,所述元素位置η以1开始计数(步骤108);保存数 组I和G,数组I和G即为源文件无损压缩后的文件(步骤109)。图2为对经压缩的文件进行解压缩的流程图,如图2所示,解压缩的步骤为读取 数组G中的二进制序列,将数组G中第一位二进制代码存入变量g中(步骤201);用数组A
5中“持续0直至下一位是1”的长度替换“持续0直至下一位是1”中所出现的所有的“0” ; 用数组A中“持续1直至下一位是0”的长度替换“持续1直至下一位是0”中所出现的所 有的“1”,所得序列存入新建数组F中(步骤202);接着统计数组F中出现的不同的元素 及,将这些不同的元素按出现的顺序存入新建数组E中(步骤203);然后,将数组E中的元 素按升序排序,排序后的序列存入新建数组D中(步骤204);读取数组I,设数组I中共有 i个元素,将数组D中后i个元素使用数组I中的元素替换,替换后的序列存入新建数组C 中(步骤205);之后,将数组D中元素和数组C中元素按照一一对应的关系,对数组F中所 有的元素进行替换,所得序列存入新建数组B中(步骤206);最后将数组B中所有元素做 上述第1)步骤的反变换,其中数组B中的第一位代码为变量g中所存的代码,反变换后的 二进制代码序列存入新建数组A中,将数组A保存为文件,该文件即为源文件(步骤207)。下面以实例对本发明进行说明。假设某个将要进行压缩的文件W,一、上述W文件的无损压缩过程如下1)以二进制方式读取出的二进制代码A = {001001011101001100000111010111110},a = 0 ;2)用数组A中“持续0直至下一位是1”的长度替换“持续0直至下一位是1”中 所出现的所有的“0”;用数组A中“持续1直至下一位是0”的长度替换“持续1直至下一位 是0”中所出现的所有的“1”,所得序列存入新建数组B中;B = 21211311225311151};3)统计数组B中出现的不同的元素,将这些不同的元素按出现的顺序存入新建数 组C中;C= {2135},4)将数组C中的元素按升序排序,排序后的序列存入新建数组D中;D = {1235};5)将数组D中第η个元素值使用数字η代替,所得序列存入新建数组E中;E = {1234};6)将数组D中元素和数组E中元素按照一一对应的关系,对数组B中所有的元素 进行替换,所得序列存入新建数组F中;F= {21211311224311141};7)将数组F中所有元素做上述第1)步骤的反变换,其中数组F中的第一位代码为 变量a中所存的代码,反变换后的二进制代码序列存入新建数组G中;G= {0010010111010011000011101011110};8)将数组D中元素进行“后项减去相邻前项”处理,结果存入新建数组H中,寻找 数组H中第一个大于或等于2的元素位置,设此元素在数组H中的位置为n,将数组D中前 η个元素全部删除,剩余的元素顺序存入新建数组I中;H= {112},I = {5};9)保存数组I和G为二进制文件,此二进制文件即为源文件无损压缩后的文件。分析比较数组A和数组G可以看出,数组G比数组A中少了 2个二进制代码,即 数组G比数组A中少占了 2个比特位的空间。在此例中源文件序列A的长度为33比特位,
6压缩后文件序列G的长度为31比特位,意即此算法去除了 A中6%的冗余数据,节省了 6% 的存储空间。二、压缩后的W文件的解压过程1)读取压缩后的文件中数组G中的二进制序列G = {0010010111010011000011101011110},g = 0 ;2)用数组A中“持续0直至下一位是1”的长度替换“持续0直至下一位是1”中 所出现的所有的“0”;用数组A中“持续1直至下一位是0”的长度替换“持续1直至下一位 是0”中所出现的所有的“ 1 ”,所得序列存入新建数组F中;F= {21211311224311141};3)统计数组F中出现的不同的元素及,将这些不同的元素按出现的顺序存入新建 数组E中;E = {2134};4)将数组E中的元素按升序排序,排序后的序列存入新建数组D中;D = {1234};5)读取数组I,设数组I中共有i个元素,将数组D中后i个元素使用数组I中的 元素替换,替换后的序列存入新建数组C中;I= {5},i = 1,C = {1235};6)将数组D中元素和数组C中元素按照一一对应的关系,对数组F中所有的元素 进行替换,所得序列存入新建数组B中;B= {21211311225311151};7)将数组B中所有元素做上述第1)步骤的反变换,其中数组B中的第一位代码 为变量g中所存的代码,反变换后的二进制代码序列存入新建数组A中,将数组A保存为文 件,该文件即为源文件;A= {001001011101001100000111010111110} O
权利要求
一种通用信息的无损压缩方法,其步骤如下1)以二进制方式读取源文件,所得二进制序列存入新建数组A中,将数组A中的第一位二进制代码存入变量a中;2)用数组A中“持续0直至下一位是1”的长度替换“持续0直至下一位是1”中所出现的所有的“0”;用数组A中“持续1直至下一位是0”的长度替换“持续1直至下一位是0”中所出现的所有的“1”,所得序列存入新建数组B中;3)统计数组B中出现的不同的元素,将这些不同的元素按出现的顺序存入新建数组C中;4)将数组C中的元素按升序排序,排序后的序列存入新建数组D中;5)将数组D中第n个元素值使用数字n代替,所得序列存入新建数组E中;6)将数组D中元素和数组E中元素按照一一对应的关系,对数组B中所有的元素进行替换,所得序列存入新建数组F中;7)将数组F中所有元素做上述第1)步骤的反变换,其中数组F中的第一位代码为变量a中所存的代码,反变换后的二进制代码序列存入新建数组G中;8)将数组D中元素进行“后项减去相邻前项”处理,结果存入新建数组H中,寻找数组H中第一个大于或等于2的元素位置,设此元素在数组H中的位置为n,将数组D中前n个元素全部删除,剩余的元素顺序存入新建数组I中;9)保存数组I和G为二进制文件,此二进制文件即为源文件无损压缩后的文件。
2.根据权利要求1所述的通用信息的无损压缩方法,其特征在于步骤5)中,数字η以 1开始计数。
3.根据权利要求1所述的通用信息的无损压缩方法,其特征在于步骤8)中,元素位 置η以1开始计数。
4.根据权利要求1、2或3所述的通用信息的无损压缩方法,其特征在于步骤1)中, 所述源文件为未经压缩软件压缩过的数据信息,或者是经压缩软件压缩过的数据信息。
5.一种通用信息的解压缩方法,其步骤如下1)读取数组G中的二进制序列,将数组G中第一位二进制代码存入变量g中;2)用数组A中“持续0直至下一位是1”的长度替换“持续0直至下一位是1”中所出 现的所有的“0” ;用数组A中“持续1直至下一位是0”的长度替换“持续1直至下一位是 0”中所出现的所有的“1”,所得序列存入新建数组F中;3)统计数组F中出现的不同的元素及,将这些不同的元素按出现的顺序存入新建数组 E中;4)将数组E中的元素按升序排序,排序后的序列存入新建数组D中;5)读取数组I,设数组I中共有i个元素,将数组D中后i个元素使用数组I中的元素 替换,替换后的序列存入新建数组C中;6)将数组D中元素和数组C中元素按照一一对应的关系,对数组F中所有的元素进行 替换,所得序列存入新建数组B中;7)将数组B中所有元素做上述第1)步骤的反变换,其中数组B中的第一位代码为变 量g中所存的代码,反变换后的二进制代码序列存入新建数组A中,将数组A保存为文件, 该文件即为源文件。
全文摘要
本发明公开了一种通用信息的无损压缩与解压缩方法。所述的无损压缩方法是通过对被压缩的文件进行特殊的变换和处理得到,与现有技术相比,本发明所述压缩方法不仅可对常见的文件格式数据进行无损压缩,而且对已经经过常用压缩软件压缩过的数据信息也能进一步再压缩,使压缩得到的文件所占用空间更小,可在原有的压缩比的基础上再去除1~80%的冗余(去除的冗余量情况视文件内部数据冗余不同而不同),而且本发明所述压缩方法算法简单,易于实现。
文档编号H03M7/30GK101977061SQ201010515469
公开日2011年2月16日 申请日期2010年10月19日 优先权日2010年10月19日
发明者王文延 申请人:广西师范大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1