• 使用 LZMA SDK


    • 首先是MinGW调用VC编译出的DLL

          LZMA SDK 4.65默认是VC项目,懒得再写makefile了,就直接用VS2008编译吧!还好,压缩/解压核心代码是C的,为保证DLL最大兼容性,选用__cdecl,按C代码编译。得到DLL后,需要使用MinGW中自带的dlltool工具将其转为.a文件:

    dlltool -U -D LZMA.DLL -d LZMA.def -l LZMA.a

          转换过程,def文件是必须有的(从SDK中可以找到,找不到拿工具转),得到的.a文件很小,只有3K左右。然后使用“-L库文件路径”、“-l库文件名(不带.a)”作为参数来编译项目。注意,此路径下不可有与.a文件同名的.lib文件(记得编译DLL时生成的一个.lib文件吧?赶紧删了!),否则,会得到“undefined reference to…”的链接错误。

    • 使用压缩函数LzmaCompress

          本以为压缩函数的输出缓冲区与输入缓冲区相等就可以了,如果你压缩时该函数返回7(SZ_ERROR_OUTPUT_EOF)就说明压缩后的数据大于原数据。为了避免该错误出现,有两种选择:

    1、出现该返回值时,说明压缩后的文件将大于压缩前的文件,可以考虑放弃使用压缩。

    2、使得输出缓冲区大小至少为1.1×原数据大小 + 16K(使用LZMA算法,默认参数)/为1.001×原数据大小 + 32(使用LZMA2算法,该算法自动检测数据是否可压缩)

    • LzmaCompress的输出结果

          该函数的输出结果并不写文件头,我们可以使用props缓冲区的5bytes和*destLen的8bytes一起作为文件头。

    引用文献

  • 相关阅读:
    HDFS架构原理
    Hadoop集群搭建
    解决8080端口号占用问题
    基于SSM的Maven项目(Redis和Mysql)配置文件整合
    maven 集成SSM项目配置文件模版
    初识Spring笔记
    初识Mybatis一些总结
    将对数据库的增删改查封装为方法
    10分钟安装Elasticsearch
    ThreadLocal详解
  • 原文地址:https://www.cnblogs.com/codingmylife/p/1800947.html
Copyright © 2020-2023  润新知