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. 更新开源库到pods上时报CocoaPods was not able to update the `master` repo的解决办法

    今天在更新我的开源库到pods上时,使用以下命令时,报错了... pod trunk push SwiftPopMenu.podspec 错误内容: CocoaPods was not able to ...

  2. java导出文件IE/Google文件名乱码兼容

      导出文件名乱码解决方案: String agent = request.getHeader("User-Agent"); boolean isMSIE = (agent != ...

  3. HDUOJ---2955 Robberies

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  4. HDUOJ--------(1312)Red and Black

    Red and Black Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  5. C# 动态创建SQL数据库(二) 在.net core web项目中生成二维码 后台Post/Get 请求接口 方式 WebForm 页面ajax 请求后台页面 方法 实现输入框小数多 自动进位展示,编辑时实际值不变 快速掌握Gif动态图实现代码 C#处理和对接HTTP接口请求

    C# 动态创建SQL数据库(二) 使用Entity Framework  创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ...

  6. AP_应付模组在月结的处理

    2014-06-04 Created By BaoXinjian 1. 完成所有交易及检查Interface      (1). Invoice and Credits      (2). Prepa ...

  7. Linux内核(11) - 子系统的初始化之内核选项解析

    首先感谢国家.其次感谢上大的钟莉颖,让我知道了大学不仅有校花,还有校鸡,而且很多时候这两者其实没什么差别.最后感谢清华女刘静,让我深刻体会到了素质教育的重要性,让我感到有责任写写子系统的初始化. 各个 ...

  8. java使用ssh访问Linux的项目jscraft

    一.gradle地址 // https://mvnrepository.com/artifact/com.jcraft/jsch compile group: 'com.jcraft', name: ...

  9. Spark部署配置

    前提是已经安装了Hadoop ============================ SetUp Spark=============================Configuration sp ...

  10. struts中action名称反复导致的神秘事件

    近期由于项目需求变更.须要本人对当中的某个业务功能进行改动.本人依照前台页面找action,依据action找代码的逻辑进行了改动(公司项目是ssh框架,struts配置全部是通过注解的方式进行.配置 ...