数据压缩处理库-LZO


LZO是致力于解压速度的一种数据压缩算法库,系Lempel-Ziv-Oberhumer的缩写。这个算法是无损算法,参考实现程序是线程安全的。
实现它的一个自由软件工具是lzop。最初的库是用ANSI C编写、并且遵从GNU通用公共许可证发布的。现在LZO有用于Perl、Python以及Java的各种版本,代码版权的所有者是Markus F. X. J. Oberhumer。
LZO is a data compression library which is suitable for data de-/compression in real-time. This means it favours speed over compression ratio.
LZO is written in ANSI C. Both the source code and the compressed data format are designed to be portable across platforms.
特点
解压简单,速度非常快。
解压不需要内存。
压缩相当地快。
压缩需要64kB的内存。
允许在压缩部分以损失压缩速度为代价提高压缩率,解压速度不会降低。
包括生成预先压缩数据的压缩级别,这样可以得到相当有竞争力的压缩比。
另外还有一个只需要8 kB内存的压缩级别。
算法是线程安全及无损的。
1. 快速压缩与解压
其一个显著优势是其在压缩和解压数据时的高速度。LZO利用了高效的数据结构和算法,在不牺牲过多压缩率的情况下,提供极快的数据处理速度。它的设计哲学是“快速压缩,更快解压”,这使得LZO在需要实时数据处理的场合中十分受欢迎。
2. 内存占用小
在压缩时只需要64KiB的内存支持,甚至有压缩级别只需要8KiB的内存支持。这使得LZO在内存受限的环境中仍然能够有效工作。
3. 跨平台使用
压缩后的数据被设计为可以跨平台使用的格式,这意味着它可以在不同的操作系统和硬件平台上使用。
4. 线程安全
提供线程安全,这意味着它可以在多线程环境中使用,而不会出现数据竞争或一致性问题。
5. 无损压缩
提供无损压缩,确保压缩和解压后的数据与原始数据完全一致。
6. 多种压缩级别
提供了多种压缩级别,可以根据需要调节压缩比例,而这并不影响解压的效率。提高压缩比例自然会降低压缩速度,但解压速度始终保持快速。
7. MiniLZO
MiniLZO是LZO的一个轻量级版本,专为那些只需要小型压缩/解压缩功能的程序设计。编译后的MiniLZO库小于5KB,非常适合内嵌在主程序中。
8. 应用场景
由于其快速的压缩和解压能力,非常适合进行数据的实时压缩解压处理,如网络传输、内存数据压缩以及存储密集型应用。
9. 性能对比
与传统压缩技术如Deflate和Bzip2相比,LZO在压缩速度上具有明显优势,尤其是在解压速度上,LZO的速度优势更为明显。
10. 代码示例
以下是一个简单的C语言示例,展示了如何使用LZO进行压缩和解压:
#include <stdio.h>
#include <lzo1x.h>
int main() {
const char *input = "This is a test string.";
unsigned char output[lzo1x_1_compressbound(strlen(input))];
size_t osize = sizeof(output);
lzo1x_1_compress(input, strlen(input), output, &osize);
printf("Compressed: %s\n", output);
unsigned char decompressed[lzo1x_1_decompressbound(osize)];
size_t dosize = sizeof(decompressed);
lzo1x_1_decompress(output, osize, decompressed, &dosize);
printf("Decompressed: %s\n", decompressed);
return 0;
}
该示例展示了LZO的基本使用方法,包括压缩和解压的过程。
LZO支持重复压缩以及原地解压。其块压缩算法——压缩解压成块的数据,压缩与解压所用块的大小必须一样。
LZO将数据块压缩成匹配数据(滑动字典)与非匹配文字的序列。LZO对于较长的匹配数据以及较长的非匹配文字序列有专门的处理,这样对于高度冗余的数据能够取得很好的效果,并且对于不可压缩的数据也能得到可以接受的效果。当处理不可压缩数据的时候,LZO将每个1024字节的输入数据块扩展16字节。
相关算法
miniLZO:是LZO压缩库的子集。
UCL算法 :相比于LZO,压缩率高,解压慢,UPX用的此算法。UCL是NRV(Not Really vanished)相关算法。UCL倒是有软件支持的,如simplyzip。
最新版本:2.0
项目主页:http://www.oberhumer.com/opensource/lzo/
实现它的一个自由软件工具是lzop。最初的库是用ANSI C编写、并且遵从GNU通用公共许可证发布的。现在LZO有用于Perl、Python以及Java的各种版本,代码版权的所有者是Markus F. X. J. Oberhumer。
LZO is a data compression library which is suitable for data de-/compression in real-time. This means it favours speed over compression ratio.
LZO is written in ANSI C. Both the source code and the compressed data format are designed to be portable across platforms.
特点
解压简单,速度非常快。
解压不需要内存。
压缩相当地快。
压缩需要64kB的内存。
允许在压缩部分以损失压缩速度为代价提高压缩率,解压速度不会降低。
包括生成预先压缩数据的压缩级别,这样可以得到相当有竞争力的压缩比。
另外还有一个只需要8 kB内存的压缩级别。
算法是线程安全及无损的。
1. 快速压缩与解压
其一个显著优势是其在压缩和解压数据时的高速度。LZO利用了高效的数据结构和算法,在不牺牲过多压缩率的情况下,提供极快的数据处理速度。它的设计哲学是“快速压缩,更快解压”,这使得LZO在需要实时数据处理的场合中十分受欢迎。
2. 内存占用小
在压缩时只需要64KiB的内存支持,甚至有压缩级别只需要8KiB的内存支持。这使得LZO在内存受限的环境中仍然能够有效工作。
3. 跨平台使用
压缩后的数据被设计为可以跨平台使用的格式,这意味着它可以在不同的操作系统和硬件平台上使用。
4. 线程安全
提供线程安全,这意味着它可以在多线程环境中使用,而不会出现数据竞争或一致性问题。
5. 无损压缩
提供无损压缩,确保压缩和解压后的数据与原始数据完全一致。
6. 多种压缩级别
提供了多种压缩级别,可以根据需要调节压缩比例,而这并不影响解压的效率。提高压缩比例自然会降低压缩速度,但解压速度始终保持快速。
7. MiniLZO
MiniLZO是LZO的一个轻量级版本,专为那些只需要小型压缩/解压缩功能的程序设计。编译后的MiniLZO库小于5KB,非常适合内嵌在主程序中。
8. 应用场景
由于其快速的压缩和解压能力,非常适合进行数据的实时压缩解压处理,如网络传输、内存数据压缩以及存储密集型应用。
9. 性能对比
与传统压缩技术如Deflate和Bzip2相比,LZO在压缩速度上具有明显优势,尤其是在解压速度上,LZO的速度优势更为明显。
10. 代码示例
以下是一个简单的C语言示例,展示了如何使用LZO进行压缩和解压:
#include <stdio.h>
#include <lzo1x.h>
int main() {
const char *input = "This is a test string.";
unsigned char output[lzo1x_1_compressbound(strlen(input))];
size_t osize = sizeof(output);
lzo1x_1_compress(input, strlen(input), output, &osize);
printf("Compressed: %s\n", output);
unsigned char decompressed[lzo1x_1_decompressbound(osize)];
size_t dosize = sizeof(decompressed);
lzo1x_1_decompress(output, osize, decompressed, &dosize);
printf("Decompressed: %s\n", decompressed);
return 0;
}
该示例展示了LZO的基本使用方法,包括压缩和解压的过程。
LZO支持重复压缩以及原地解压。其块压缩算法——压缩解压成块的数据,压缩与解压所用块的大小必须一样。
LZO将数据块压缩成匹配数据(滑动字典)与非匹配文字的序列。LZO对于较长的匹配数据以及较长的非匹配文字序列有专门的处理,这样对于高度冗余的数据能够取得很好的效果,并且对于不可压缩的数据也能得到可以接受的效果。当处理不可压缩数据的时候,LZO将每个1024字节的输入数据块扩展16字节。
相关算法
miniLZO:是LZO压缩库的子集。
UCL算法 :相比于LZO,压缩率高,解压慢,UPX用的此算法。UCL是NRV(Not Really vanished)相关算法。UCL倒是有软件支持的,如simplyzip。
最新版本:2.0
项目主页:http://www.oberhumer.com/opensource/lzo/