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 包含以下内容:

C++ source code of LZMA Encoder and Decoder

C++ source code for .7z compression and decompression (reduced version)

ANSI-C compatible source code for LZMA / LZMA2 / XZ compression and decompression

ANSI-C compatible source code for 7z decompression with example

C# source code for LZMA compression and decompression

Java source code for LZMA compression and decompression

lzma.exe for .lzma compression and decompression

7zr.exe to work with 7z archives (reduced version of 7z.exe from 7-Zip)

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[**] = {  };       // 用于中间过程的内存,原始大小为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[];

         char *argvs[];

         argvs[] = NULL;

         argvs[] = "d";

         argvs[] = in_file_name;          

         argvs[] = out_file_name;                

         return main2(, argvs, buf);

}

压缩函数只需要将argv[1]=”d”替换成,argv[1]=”e”即可

7-zip 压缩算法及C SDK使用的更多相关文章

  1. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  2. atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php

    atitit.压缩算法 ZLib ,gzip ,zip   最佳实践  java .net php 1. 压缩算法的归类::: 纯算法,带归档算法 1 2. zlib(适合字符串压缩) 1 3. gz ...

  3. Android SDK Android NDK Android Studio 官方下载地址

    2016.12 Android Studio Windows Includes Android SDK https://dl.google.com/dl/android/studio/install/ ...

  4. ubuntu 安装eclipse,adt,android sdk,离线

    1.安装jdk 环境变量 $ sudo gedit ~/.bashrc export JAVA_HOME=/usr/local/jdk1.8.0_65export JRE_HOME=${JAVA_HO ...

  5. Android SDK Tools Platform-tools Build-tools

    (1)Android SDK (Android SDK主安装包,包含SDK Manager.AVD Manager.工具包tools,释放后的根文件夹为android-sdk-windows): re ...

  6. 【Android】Android SDK Manager更新慢/失败的问题

    前言:更新下载Intel x86 Atom_64 System Image的时候总是失败,速度只有几KB,我这是10M的网啊. 最后找到一篇日志,解决了这个问题.非常感谢!其参考地址:http://w ...

  7. Android SDK版本和ADT版本

    Android SDK版本和ADT版本   Android早期的版本号有点“混乱”,比如Android 2.2对应的ADT版本为ADT-0.9.9而Android 2.3对应的的ADT版本则突然“跃迁 ...

  8. Android SDK下载地址

    原地址:http://lameck.blog.163.com/blog/static/38811374201262111309677/ Android SDK.ADT.tools等官方下载地址(201 ...

  9. 【Android 应用开发】Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载

    19af543b068bdb7f27787c2bc69aba7f Additional Download (32-, 64-bit) Package r10 STL debug info androi ...

随机推荐

  1. php 回收周期(Collecting Cycles)

    http://docs.php.net/manual/zh/features.gc.collecting-cycles.php 传统上,像以前的 php 用到的引用计数内存机制,无法处理循环的引用内存 ...

  2. python学习笔记——multiprocessing 多进程模块Process

    系统自带的fork模块创建的多进程是基于Linux或Unix平台的,而window平台并不支持: python中的multiprocess为跨平台版本的多进程模块,支持子进程.通信和共享数据.执行不同 ...

  3. R.string获取的是数字或者R.integer数字不对的问题

    String msg = R.string.menu_title; 获取menu_title的String值,但发现这样写报错,原因R.string.menu_title是int类型的,可是通过以下方 ...

  4. pycurl 学习笔记--getinfo 函数

    通过 pycurl.Curl 对象的 getinfo 函数,可以获取到响应的如下信息: (参考: http://curl.haxx.se/libcurl/c/curl_easy_getinfo.htm ...

  5. Mysql 数据备份与恢复,用户创建,授权

    Mysql 数据备份与恢复,用户创建,授权 1. Mysqldump >outfile.sql 2. Mysql –uxxx –pxxx < backfile.sql 3. Create  ...

  6. win7下安装ubuntu双系统的方法及心得体会(ps:要死好几回的节奏)

    1.win7下安装ubuntu系统后,可以很好进入ubuntu系统 但是进不去win7,开机有win7选项,但是选择后不管用 方法思路:各种修复win7的mbr 我的问题是:在winpe中发现,根本看 ...

  7. Cordic算法简介

    作者:桂. 时间:2017-08-14  19:22:26 链接:http://www.cnblogs.com/xingshansi/p/7359940.html 前言 CORDIC算法常用来求解信号 ...

  8. 深入浅出 妙用Javascript中apply、call、bind【转】

    网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.call.bind的认识,并且列出一些它们的妙用加深记忆. apply.call 在 javascript ...

  9. 3dmax 物体的真正局部空间原点

    假设在3dmax中创建一个 长x宽x高=1cm x 1cm x 1cm 的单位立方体,则默认局部坐标系原点在底面中心,进入 “层次”面板->轴->调整轴,按下“仅影响轴”,再点“居中到对象 ...

  10. 分享一个不错的squid 配置文件

    squid配置文件一例,只使用了web cache功能,用来给web加速. http_port 80 defaultsite=IPicp_port 0cache_peer ip parent 85 0 ...