1. 介绍
官方网址:中文:
http://sparanoid.com/lab/7z/
英文:
http://www.7-zip.org/
SDK下载网址:中文:
http://sparanoid.com/lab/7z/
英文:
http://www.7-zip.org/sdk.html
SDK开发支持语言:Java C/C++ C#
缺点:LZMA SDK相关文档不完整.
7-zip当前最新稳定版本为:7-Zip 9.20稳定版,最后更新时间为:2010-11-18
7-zip当前最新版本为:7-Zip 9.32 alpha,最后更新时间为:2013-12-01
7z 是一种全新的压缩格式,它拥有极高的压缩比。7z 格式的主要特征:
l 开放的结构
l 高压缩比
l 强大的 AES-256 加密
l 能够兼容任意压缩、转换、加密算法
l 最高支持 16000000000 GB 的文件压缩
l 以 Unicode 为标准的文件名
l 支持固实压缩
l 支持文件头压缩
7z
已公开了结构编辑功能,所以它可以支持任何一种新的压缩算法。到目前为止,下列压缩算法已被整合到了
7z
中:
l 压缩速度:运行于 2 GHz 的处理器可达到 1 MB/秒
l 解压缩速度:运行于 2 GHz 的处理器可达到 10-20 MB/秒
l 较小的解压缩内存需求(取决于字典大小)
l 较小的解压缩代码:约 5 KB
l 支持 Pentium 4 的超线程(Hyper-Threading)技术及多处理器
LZMA 压缩算法非常适于应用程序的内嵌。LZMA 发布于 GNU LGPL 许可协议之下,如果您想使用 LZMA 的代码,您可以通过
发送信息到 LZMA 开发部
来咨询和自定义设计代码及制定开发者的使用许可。您也可以点击此处来查看有关 LZMA SDK 的信息:
LZMA SDK
.
7z 是
7-Zip
发布于 GNU LGPL 许可下的子程序。您可从
下载页面
下载 7-Zip 的源代码。
支持 7z 压缩格式的应用程序:WinRAR、PowerArchiver、TUGZip、IZArc。
2 LZMA SDK介绍
SDK下载网址:中文:
http://sparanoid.com/lab/7z/
英文:
http://www.7-zip.org/sdk.html
SDK开发支持语言:Java C/C++ C#
9.20版本下载地址:
http://downloads.sourceforge.net/sevenzip/lzma920.tar.bz2
,新增用于安装包的精简版 SFX 自释放模块。
3. LZMA SDK代码分布
下载lzma920.tar.bz2后,解压目录如下:
LZMA SDK 包含以下内容:
l
C++
source code of LZMA Encoder and Decoder
l
C++
source code for .7z compression and decompression (reduced version)
l
ANSI-C
compatible source code for LZMA / LZMA2 / XZ compression and decompression
l
ANSI-C
compatible source code for 7z decompression with example
l
C#
source code for LZMA compression and decompression
l
Java
source code for LZMA compression and decompression
l
lzma.exe
for .lzma compression and decompression
l
7zr.exe
to work with 7z archives (reduced version of 7z.exe from 7-Zip)
l
ANSI-C
and
C++
source code in LZMA SDK is subset of source code of 7-Zip.
ANSI-C LZMA
解压缩代码是从原始的
C++
源代码
转换到
C
。并简化和优化了代码的大小。但它依然和 7-Zip 的 LZMA 完全兼容。
Util和相对应的文件。
Util目录内容如下:
目录名 说明 支持平台
7z 生成可执行程序7z Linux/Windows
Lzma 生成可执行程序lzma Linux/Windows
LzmaLib 生成LZMA.dll动态库 Windows
SfxSetup 生成可执行程序7zS2.sfx Windows
CPP目录内容如下:
目录名 说明 支持平台
7z 生成可执行程序7z Linux/Windows
Windows: CPP\7zip\UI\Client7z -> client7z.exe
CPP\7zip\Bundles\Alone7z –> 7zr.exe
CPP\7zip\Bundles\LzmaCon-> lzma.exe
Linux: CPP\7zip\Bundles\LzmaCon -> lzma
Common 公共包含的文件 Linux/Windows
Windows Windows平台下包含的文件 Windows
Java目录
主要包含7zip.jar和使用的Java源代码
结论:对于Linux
下程序集成开发采用C
语言SDK
更加方便。
4. 使用LZMA C SDK
C版本SDK已经实现了针对输入文件压缩和解压缩的功能,具体功能在:
C/Util/Lzma/LzmaUtil.c中的main2函数中实现,可以从main函数中直接调用。
int main2(int numArgs, const char *args[], char *rs)
实现lzma程序的main函数如下:
int MY_CDECL main(int numArgs, const char *args[])
char rs[10*1024*1024] = { 0 }; // 用于中间过程的内存,原始大小为80K
int res = main2(numArgs, args, rs);
fputs(rs, stdout);
return res;
对于lzma程序来讲,使用帮助如下:
lzma <e|d> inputFile outputFile
e: encode file
d: decode file
因此如果使用文件解压缩的话,只需要将LzmaUtil.c中的main函数使用宏定义控制,将相关文件编译成动态库使用即可。
例如解压缩函数可定义如下:
int decode_file(const char *in_file_name, const char* out_file_name)
char buf[800];
char *argvs[4];
argvs[0] = NULL;
argvs[1] = "d";
argvs[2] = in_file_name;
argvs[3] = out_file_name;
return main2(4, argvs, buf);
压缩函数只需要将argv[1]=”d”替换成,argv[1]=”e”即可