LZO算法

  一:

1)LZO是致力于解压速度的一种数据压缩算法,LZO 是 Lempel-Ziv-Oberhumer 的缩写。这个算法是无损算法,参考实现程序是线程安全的。 实现它的一个自由软件工具是lzop。现在 LZO 有用于 Perl、Python 以及 Java 的各种版本。

2)LZO 拥有如下的特点:

  • 解压速度很快,并且很简单;
  • 解压时不需要内存支持;
  • 压缩的速度还不错;
  • 压缩时只需要 64 KiB 的内存支持;
  • 压缩比例可以根据需要调节,而这并不影响解压的效率,提高压缩比例自然会降低压缩速度;
  • 压缩包含了很多的压缩级别,提供很多选择;
  • 提供只需要 8 KiB 内存支持的压缩级别;
  • 提供线程安全;
  • 提供无损压缩;

二:

1)LZO压缩算法压缩原理

    LZO压缩算法采用(重复长度L,指回距离D)代替当前已经在历史字符串中出现过的字符串,其中,重复长度是指,后出现的字符串与先出现的字符串中连续相同部分的长度;指回距离是指,先后两个相同字符串之间相隔的距离(每个字节为一个单位);如果没出现过(定义为新字符),则首先输出新字符的个数,再输出新字符。例如,待处理的字符串为“ABCDEFGHABCDEFJKLM”,压缩算法逐个处理字符,处理ABCDEFGH时没发现重复字符;处理到ABCDEF时发现这些字符在历史字符串中已经出现过,计算重复长度为6,指回距离(当前A离历史A的距离)为8,则用(6,8)代替ABCDEF;处理到JKLM时没发现重复字符,字符串到此处理完毕,则整个字符串被压缩成:(08)h ABCDEFGH(6,8)(04)h JKLM,其中h表示16进制。

2) LZO压缩算法编码

    LZO压缩后的数据需要经过特定的格式进行编码,如图所示, LZO压缩算法这样做的目的有两方面:调整LZO压缩率,使得LZO适合压缩重复长度短,但指回距离较长的数据;使得解压缩过程更加简单,解压缩速度更快,且不需要额外的内存。

                                                            

三:

第一步,实现代码基本调试,输出结果如下图所示:

 

调试成功:LZO算法_第1张图片 


由于testmini.c中的输入是0,故更改输入为zo_memset(in,1,in_len);运行后显示:LZO算法_第2张图片 
会明显的看到数据压缩及解压缩后的数据位,而且压缩效率极高约为221:1,解压后仍能恢复原本的数据位,是为无损压缩。 
第二步,实现界面。 
首先,选择了MFC的界面实现功能,编辑界面,然后在各个按钮中添加相应的代码,主要实现: 
(1)、点击选择文件按钮,调出Windows界面任意选择txt文件,选择成功后在示例框显示文件地址 
(2)、点击压缩或解压按钮实现lzo代码的调用及对选取文件的压缩或者解压处理。单无损、线性安全,压缩快速且仅需64KB的内存,必要时允许在压缩部分损失压缩速度换取压缩率。 

你可能感兴趣的:(LZO算法)