pdf版本下載:http://files.cnblogs.com/davad/7-zip_and_SDK.pdf
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 中:
壓縮算法 |
備注 |
LZMA |
改良與優化后的 LZ77 算法 |
LZMA2 |
改良的 LZMA 算法 |
PPMD |
基於 Dmitry Shkarin 的 PPMdH 算法 |
BCJ |
32 位 x86 可執行文件轉換程序 |
BCJ2 |
32 位 x86 可執行文件轉換程序 |
BZip2 |
標准 BWT 算法 |
Deflate |
標准 LZ77-based 算法 |
LZMA 算法是 7z 格式的默認算法。LZMA 算法具有以下主要特征:
l 高壓縮比
l 可變字典大小(最大 4 GB)
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 完全兼容。
C目錄:
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”即可