easylzma

C语言压缩库
授权协议 未知
开发语言 C/C++
所属分类 应用工具、 压缩、解压缩
软件类型 开源软件
地区 不详
投 递 者 夔桐
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

Easylzma 是一个实现了 LZMA 压缩和解压缩算法的 C 语言库。

LZMA,(Lempel-Ziv-Markov chain-Algorithm的縮寫),是 2001年以來得到發展的一個數據壓縮演算法,它用於 7-Zip 歸檔工具中的 7z 格式。它使用類似於 LZ77 的字典編碼機制,在一般的情況下壓縮率比 bzip2 為高,用於壓縮的字典檔大小可達4GB。

示例代码:

/*
 * an example of basic LZMA compression to and from memory buffers
 * using the easylzma library.
 */
 
#include "easylzma/compress.h"
 
#include <string.h>
#include <assert.h>
 
struct dataStream
{
    const unsigned char * inData;
    size_t inLen;
 
    unsigned char * outData;
    size_t outLen;
};

/* an input callback that will be passed to elzma_compress_run(),
 * it reads from a memory buffer */
static int
inputCallback(void *ctx, void *buf, size_t * size)
{
    size_t rd = 0;
    struct dataStream * ds = (struct dataStream *) ctx;
    assert(ds != NULL);
   
    rd = (ds->inLen < *size) ? ds->inLen : *size;
 
    if (rd > 0) {
        memcpy(buf, (void *) ds->inData, rd);
        ds->inData += rd;
        ds->inLen -= rd;
    }
 
    *size = rd;
 
    return 0;
}

/* an ouput callback that will be passed to elzma_compress_run(),
 * it reallocs and writes to a memory buffer */
static size_t
outputCallback(void *ctx, const void *buf, size_t size)
{
    struct dataStream * ds = (struct dataStream *) ctx;
    assert(ds != NULL);
   
    if (size > 0) {
        ds->outData = realloc(ds->outData, ds->outLen + size);
        memcpy((void *) (ds->outData + ds->outLen), buf, size);
        ds->outLen += size;
    }
 
    return size;
}

/* a function that will compress data using a 1mb dictionary and a
 * client specified encoding format (one of ELZMA_lzip or ELZMA_lzma) */
int
simpleCompress(elzma_file_format format, const unsigned char * inData,
               size_t inLen, unsigned char ** outData,
               size_t * outLen)
{
    int rc;
    elzma_compress_handle hand;
 
    /* allocate compression handle */
    hand = elzma_compress_alloc();
    assert(hand != NULL);

    /* configure the compression run with mostly default parameters  */
    rc = elzma_compress_config(hand, ELZMA_LC_DEFAULT,
                               ELZMA_LP_DEFAULT, ELZMA_PB_DEFAULT,
                               5, (1 << 20) /* 1mb */,
                               format, inLen);

    /* fail if we couldn't allocate */ 
    if (rc != ELZMA_E_OK) {
        elzma_compress_free(&hand);
        return rc;
    }
 
    /* now run the compression */
    {
        /* set up the context structure that will be passed to
         * stream callbacks */ 
        struct dataStream ds;
        ds.inData = inData;
        ds.inLen = inLen;
        ds.outData = NULL;
        ds.outLen = 0;

        /* run the streaming compression */
        rc = elzma_compress_run(hand, inputCallback, (void *) &ds,
                                outputCallback, (void *) &ds);
       
        if (rc != ELZMA_E_OK) {
            if (ds.outData != NULL) free(ds.outData);
            elzma_compress_free(&hand);
            return rc;
        }
 
        *outData = ds.outData;
        *outLen = ds.outLen;
    }
 
    return rc;
}

  • 1. easylzma是一个开源的、C语言的压缩包,在http://lloyd.github.com/easylzma/上下载,这里,我下载的是easylzma-0.0.7.zip;   2. 解压C盘或D盘根目录后(不要解在桌面上),在解开的文件及目录中,建一个build目录,再到http://www.cmake.org/下一个win32的cmake,并安装好,安装过程中,有个提示,一定选择将c

 相关资料
  • 本文向大家介绍go语言通过zlib压缩数据的方法,包括了go语言通过zlib压缩数据的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了go语言通过zlib压缩数据的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的Go语言程序设计有所帮助。

  • 问题内容: 我正在尝试使用包含大量16位浮点数的javascript读取二进制文件。可以肯定的是它是IEEE标准,低位字节序。将两个字节读入一个int非常简单,但是从那里将其扩展为一个完整的浮点数并没有太大的成功。有什么线索吗? 问题答案: 我最终根据Wikipedia页面上的信息实现了自己的解析器。它可能不是最快的,但是我对此不太担心。这里是那些好奇的人:

  • tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件] 将多个文件打包为一个归档文件,可以在打包的同时进行压缩。支持的格式为 tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时) 操作选项 -c 创建 -x 解包 -u 更新 -r 添加 -t 查看 -d 比较压缩包内文件和文件 -A 将 tar 文件添加到归档文件中 格式选项 -z 使用 gz 压缩格式 -j 使

  • Tango拥有一个默认的压缩中间件,可以按照扩展名来进行文件的压缩。同时,你也可以要求某个Action自动或强制使用某种压缩。比如: type CompressExample struct { tango.Compress // 添加这个匿名结构体,要求这个结构体的方法进行自动检测压缩 } func (CompressExample) Get() string { return f

  • 所有基于http协议的服务器组件均支持压缩,请求头Accept-Encoding的值需要包含deflate或者gzip。 即便请求头Accept-Encoding的值包含deflate或者gzip,服务器还会参考静态变量http_server::zip_min_size(默认1024,即1KB)和http_server::zip_max_size(默认307200,即300KB)来决定是否压缩:仅

  • 我有一个学校作业,要求我接受一个输入流,并使用apache commons压缩库将其压缩成一个字节数组,格式有5种(根据用户规范)。这5种格式是:ZIP、JAR、SEVENZ、BZIP2和gzip。我编写了以下方法以JAR格式压缩输入流,但得到了一个带有字符串“no current entry”的illegalStateException。

  • 问题内容: 我知道这是一项容易的任务,但是更改代码后它停止工作,并且无法恢复!我实际上使用了两个函数来进行压缩和解压缩,尽管实际上它是“ jar”和“ unjar”,但这并没有太大的区别 任何帮助/建议吗? 创建JarFile时发生错误: 问题答案: 我不知道这是否是您的问题,但是通常最好在完成写入后关闭每个zip条目。 请参阅。 在显示的代码中,不会关闭邮政编码中的最后一个条目。您也不会显示关闭

  • 本文向大家介绍Android图片压缩(质量压缩和尺寸压缩),包括了Android图片压缩(质量压缩和尺寸压缩)的使用技巧和注意事项,需要的朋友参考一下 在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手机拍照都能达到3M左右了,尺寸压缩一般可用于生成