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. 【LeetCode】149. Max Points on a Line

    Max Points on a Line Given n points on a 2D plane, find the maximum number of points that lie on the ...

  2. 设置当前Activity的屏幕亮度

    设置当前的Activity的屏幕亮度,而不是设置系统的屏幕亮度,退出当前的Activity后恢复系统的亮度. 直接看代码好了 Java代码 WindowManager.LayoutParams lp  ...

  3. 腾讯云HTTPS设置管理

    腾讯云HTTPS解决方案:腾讯云针对现有用户,提供HTTPS的安全加密方案.腾讯云HTTPS有两种解决方法:客户自带证书和腾讯提供域名和证书. 腾讯云HTTPS解决方法客户提供证书和私钥,托管至腾讯云 ...

  4. JAVA命令行编译及运行

    第一部分:单文件 一.背景目标文件HelloWorld.java package ccdate; public class HelloWorld { public static void main(S ...

  5. 使用python执行linux命令

    python版本是2.7.12 一.简单的获取linux命令的执行结果,比如:获取一个PID的进程树结构,linux命令是pstree -p pid,在python中有一个模块可以方便的获取.至于有时 ...

  6. django1.8中如何显示图片,应用css样式,javascript事件

    在django中将图片.javascript.css称为静态文件.如何将这些静态文件显示在django中呢?近期做一个项目,一直困扰着我,后来查找各种资源,终于在官方文档中找到. 官方文档链接 在se ...

  7. Java简单验证码的识别

    1. 需求 因为项目需要,需要多次登录某网站抓取信息.所以学习了验证码的一些小知识.文章参考http://blog.csdn.net/problc/article/details/5794460的部分 ...

  8. jquery的animate()方法也可设置非css属性

    如题,举例: $('body').animate({scrollTop:0}, 1500); $("body").animate({scrollTop:"-=" ...

  9. QWidget子窗口中setStyleSheet无效,解决方法

    继承 QWidget setStyleSheet无效,解决方法. 发现 继承自QWidget的自定义类 ,使用setStyleSheet无效, 如果删除头文件中的 Q_OBJECT,setStyleS ...

  10. 【Android】3.19 示例19--全景图HelloWorld

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 百度全景图是一种实景地图服务.为用户提供城市.街道和其他环境的360度全景图像,用户可以通过该服务获得如临其境 ...