LZO基本介绍与调试总结

来源:互联网 发布:linux命令补全快捷键 编辑:程序博客网 时间:2024/05/16 18:07


一、LZO介绍

LZO是一个用 ANSI C语言编写的无损压缩库。他能够提供非常快速的压缩和解压功能。解压并不需要内存的支持。即使使用非常大的压缩比例进行缓慢压缩出的数据,依然能够非常快速的解压。LZO遵循GNUGPL使用许可。

LZO非常适合进行数据的实时压缩解压处理,这就是说他更关心操作速度,而不是压缩比例。

LZO使用 ANSI C语言编写,并且压缩后的数据也被设计为可以跨平台使用的格式。

LZO拥有如下的特点:

  • 解压速度很快,并且很简单;

  • 解压时不需要内存支持;

  • 压缩的速度还不错;

  • 压缩时只需要 64 KiB的内存支持;

  • 压缩比例可以根据需要调节,而这并不影响解压的效率,提高压缩比例自然会降低压缩速度;

  • 压缩包含了很多的压缩级别,提供很多选择;

  • 提供只需要 8 KiB内存支持的压缩级别;

  • 提供线程安全;

  • 提供无损压缩;

    参考资料:http://www.oberhumer.com/opensource/lzo/lzofaq.php

                        http://blog.csdn.net/romainxie/article/details/8228231(译)

    二、代码

    从网址https://www.oberhumer.com/opensource/lzo/下载LZO源代码,解压缩后的文件:lzo-2.10,包含以下文件夹:

    通过说明性文件,可以得知:

    文件夹B:包含了 DOSwindows等系统的支持文件

    文件夹examples:包含了示例程序代码

    文件夹include:包含了公共头文件

    文件夹minilzo:包含了LZO算法一种简化版

    文件夹src:包含了LZO源码

    文件夹util:包含了一些涉及到的脚本

    三、编解码器的编写

    1、新建工程LZO

    2、这里采用的代码原型是simple.c文件,之后添加example文件夹以及src文件夹以及include文件夹中的相关文件(具体方法是在运行之后根据debug内容添加相关文件)

    注:在修改中出现并克服了以下问题

    1)之前一直显示找不到.h文件,因为是新建了工程,所以引入的.h文件不能再使用<>,而应该使用””

    2)如果.c文件引入的.h文件和其在一个文件里,使用#include”xxx.h” ,如果.h文件在和.c文件同一层的文件夹里,使用#include”xxx/xxx.h”,如果.h文件和.c文件所在的文件夹是并列的,使用#include”../xxx.h”

    3、代码内容

    1)定义变量

    2lzo库初始化

    3)读取输入输出文件,这里使用文件指针,使用buffer存放读入数据

    4)这里需要得到输入文件的大小,这里采用fseek()以及ftell()函数。

    其中,fseek()函数的用法如下:

    fseekfp10,0);//就是把指针指向fp文件开头10字节处

    fseekfp10,1);//就是把指针指向fp文件离当前位置10字节处

    fseekfp10,2);//就是把指针指向fp文件结尾前10字节处

    ftell()函数的用法如下:

    n=ftellfp);//n即为偏离文件首字符个数

    5)调用lzo1x_1_compress函数进行压缩,并把数据写入输出文件

    6)调用lzo1x_decompress函数进行解压缩

    7)释放缓冲区关闭文件

    4、结果

    输入文件是个自己写的input.txt

    输出文件是压缩后的文件output.txt

    运行结果如下:

  • 从中可以看出1198字节的input.txt被压缩成135字节,后又被解压成1198字节,因为存在很多重复字母以及重复排列顺序,所以压缩量是很可观的。

0 0
原创粉丝点击