LZO基本介绍与调试总结

一、LZO介绍

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

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:包含了 DOS、windows 等系统的支持文件

    文件夹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)定义变量

    (2)lzo库初始化

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

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

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

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

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

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

    ftell()函数的用法如下:

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

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

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

    (7)释放缓冲区关闭文件

    4、结果

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

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

    运行结果如下:

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值