7z格式、LZMA压缩算法和7-Zip详细介绍

转载自:http://velep.com/archives/368.html

 

本文详细介绍了7z压缩格式、LZMA压缩算法和支持7z压缩格式的7-Zip压缩软件,希望对你了解7z压缩格式有所帮助。

7z,一种文件压缩格式,具有高压缩比率,它采用了多种压缩算法进行数据压缩。因此,与其它压缩格式相比,得到的压缩文档较小。现在流行的好压软件支持这种压缩格式。

7z格式的主要特色:

  • 开放式体系架构,可轻易的添加任何一种新的压缩方法,如LZMA、LZMA2、BZip2等;
  • 高压缩比率;
  • 强大的AES-256加密(256 bit  Advanced Encryption Standard (AES));
  • 能够兼容任意压缩、转换、加密算法;
  • 最高支持 16000000000 GB 的文件压缩;
  • 以 Unicode 为标准的文件名;
  • 支持固实压缩;
  • 支持文件头压缩;

7z格式支持的算法:

7z 已公开了结构编辑功能,所以它可以支持任何一种新的压缩算法。到目前为止,下列压缩算法已被整合到了 7z 中::

 

压缩算法备注
LZMA改良与优化后的 LZ77 算法
LZMA2改良的 LZMA 算法
PPMD基于 Dmitry Shkarin 的 PPMdH 算法
BCJ32 位 x86 可执行文件转换程序
BCJ232 位 x86 可执行文件转换程序
BZip2标准 BWT 算法
Deflate标准 LZ77-based 算法

LZMA算法介绍:

LZMA是7z格式默认的压缩算法,它的主要特征有:

  • 高压缩比率;
  • 可变的字典大小(高达4GB);
  • 压缩速度:在 2 GHz  CPU上,大约 1 MB/s;
  • 解压缩速度:在 2 GHz  CPU上,大约10-20 MB/s ;
  • 较小解压缩内存(依赖于所选的字典大小);
  • 较小的解压缩代码,大约5KB;
  • 支持多线程;

基于以上优点,LZMA压缩算法适合嵌入式应用。此外,LZMA算法基于GNU LGPL发布。LZMA SDK下载地址:http://www.7-zip.org/sdk.html

7-Zip介绍和主要特征:

7-Zip 是一款拥有极高压缩比的开源压缩软件,大多数源代码都基于 GNU LGPL 许可协议下发布,可任意使用。它的主要特征如下:

  • 使用了 LZMA 与 LZMA2 算法的 7z 格式,拥有极高的压缩比;
  • 支持格式:
    • 压缩 / 解压缩:7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM
    • 仅解压缩:ARJ, CAB, CHM, CPIO, CramFS, DEB, DMG, FAT, HFS, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, RAR, RPM, SquashFS, UDF, VHD, WIM, XAR, Z
  • 对于 ZIP 及 GZIP 格式,7-Zip 能提供比使用 PKZip 及 WinZip 高 2-10% 的压缩比;
  • 为 7z 与 ZIP 提供更完善的 AES-256 加密算法;
  • 7z 格式支持创建自释放压缩包;
  • Windows 资源管理器集成;
  • 强大的的文件管理器;
  • 更给力的命令行版本;
  • 支持 FAR Manager 插件;
  • 支持 79 种语言;

7-Zip

7-Zip 适用于 Windows 7 / Vista / XP / 2008 / 2003 / 2000 / NT / ME / 98。并且有面向 Mac OS X、Linux、Unix 平台的命令行版本。

7-Zip压缩比

让我们把 7-Zip 和常用的压缩软件进行比较。

文件设置:完整安装后的 Mozilla Firefox 1.0.7 for Windows 和 Google Earth 3.0.0616 for Windows。

 

软件名称Mozilla FirefoxGoogle Earth
161 个文件
15,684,168 字节
115 个文件
23,530,652 字节
压缩后压缩比压缩后压缩比
7-Zip 4.23(7z 格式)4621135100%6109183100%
WinRAR 3.505021556109%6824892112%
CABARC 5.15131393111%7434325122%
WinZip 10.0 beta(maximum-PPMd)5277118114%8200708134%
7-Zip 4.23(zip 格式)6222627135%8909446146%
WinZip 10.0 beta(maximum-portable)6448666140%9153898150%

压缩比结果由被压缩的数据大小而定。通常使用 7-Zip 的 7z 格式能比使用 zip 格式的压缩档案小 30-70%。并且使用 7-Zip 创建的 zip 格式比大多数其它压缩软件创建的都小 2-10%。

7-Zip中文官方网站:http://sparanoid.com/lab/7z/

写在最后:

reille会在接下来的两篇文章中介绍LZMA SDK和怎么把它移植到嵌入式linux中。

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
7-zip 是一种高效的压缩算法,它能够提供比传统的 ZIP 压缩算法更高的压缩比率和更快的压缩速度。同时,它还支持多种压缩格式,包括 7z、ZIP、RAR、GZIP、TAR 等。 如果你想在 C 语言中使用 7-zip压缩算法,你可以使用 7-zip 的 C SDK。该 SDK 提供了一组 C 语言 API,可以让你在你的程序中使用 7-zip压缩和解压缩功能。 以下是使用 7-zip C SDK 进行压缩的基本步骤: 1. 包含 7-zip C SDK 的头文件。 ``` #include <7z.h> ``` 2. 定义一个结构体来存储压缩参数。 ``` CLzmaEncProps props; LzmaEncProps_Init(&props); props.level = 5; ``` 3. 打开要压缩的文件。 ``` HANDLE inFile = CreateFileA("input.txt", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); ``` 4. 创建一个输出文件。 ``` HANDLE outFile = CreateFileA("output.7z", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); ``` 5. 初始化 7-zip 压缩库。 ``` ISzAlloc alloc = { SzAlloc, SzFree }; CLzmaEncHandle enc; LzmaEnc_Construct(&enc); LzmaEnc_Alloc(&enc, 1024 * 1024, &alloc, &alloc); LzmaEnc_SetProps(&enc, &props); LzmaEnc_WriteProperties(&enc, outFile); ``` 6. 压缩文件。 ``` const int bufferSize = 64 * 1024; Byte inBuffer[bufferSize]; Byte outBuffer[bufferSize]; SZ_RESULT res = SZ_OK; UInt32 inSize = 0; UInt64 outSize = 0; for (;;) { DWORD bytesRead = 0; if (!ReadFile(inFile, inBuffer, bufferSize, &bytesRead, NULL)) { res = SZ_ERROR_READ; break; } if (bytesRead == 0) { break; } inSize += bytesRead; SRes res = LzmaEnc_Encode(&enc, outBuffer, &outSize, inBuffer, bytesRead, LZMA_FINISH_ANY); if (res != SZ_OK) { break; } DWORD bytesWritten = 0; if (!WriteFile(outFile, outBuffer, outSize, &bytesWritten, NULL)) { res = SZ_ERROR_WRITE; break; } } ``` 7. 关闭文件和 7-zip 压缩库。 ``` CloseHandle(inFile); CloseHandle(outFile); LzmaEnc_Destroy(&enc); ``` 这就是使用 7-zip C SDK 进行压缩的基本步骤。你可以根据你的具体需求进行调整和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值