lzma 知识点滴

LZMA(Lempel-Ziv-Markov chain-Algorithm的缩写)是2001年以来得到发展的一个数据压缩算法,它用于7-Zip归档工具中的7z格式。它使用类似于LZ77的字典编码机制,在一般的情況下压缩率比bzip2高,用于压缩的字典档案大小可达4GB。

对比集中压缩:

耗用时间 bzip >lzma2>lzma>gzip

压缩率 lzma2>bzip>gzip>lzma

最后压缩结果是 lzma的文件最小 ,果然改进版的算法有优势。

这里要看一下lzma的文件头信息

看的方法可以直接用二进制工具打开.lzma文件 ,更方便的方法是ubuntu中已经集成了lzma的查看工具 ,利用命令行

lzmainfo   XXX.lzma

就可以看到文件头信息了:

[email protected]:~/tmp$ lzmainfo a.lzma

a.lzma

Uncompressed size:             0 MB (20644 bytes)

Dictionary size:               8 MB (2^23 bytes)

Literal context bits (lc):     3

Literal pos bits (lp):         0

Number of pos bits (pb):       2

这里就看到了文件头打印出来的信息  ,在对比一下文件的二进制信息

00h:5d 00 00 80 00 22 01 00 00 00 00 00 00 00 26 16

10h:85 bc .....

主要就是签名这一段,这里摘录一段lzma的specification

The lzma file format layout:

Offset Size Description

0     1   LZMA model properties (lc, lp, pb) in encoded form

1     4   Dictionary size (32-bit unsigned integer, little-endian)

5     8   Uncompressed size (64-bit unsigned integer, little-endian)

13         Compressed data (LZMA stream)

LZMA properties:

name  Range          Description

lc  [0, 8]         the number of "literal context" bits

lp  [0, 4]         the number of "literal pos" bits

pb  [0, 4]         the number of "pos" bits

dictSize  [0, 2^32 - 1]  the dictionary size

这里就是介绍清楚了,其他不封都应该能看懂,例如8M的Dictionary size  就在1-5这四个字节 00 00 80 00

有一个lc  lp pb   这个要说明一下,

p->lc = d % 9;

d /= 9;

p->pb = d / 5;

p->lp = d % 5;

这里可以看出   在第一个字节也就是5D里面包含的信息 lc pb lp 是以十进制方式存放的 ,有兴趣自己算一算就能明白了

lzma 知识点滴

时间: 2024-10-08 16:46:45

lzma 知识点滴的相关文章

牛腩新闻发布系统总结(四)--知识点滴

紧接上篇博客:牛腩新闻发布系统总结(三)----知识点滴,继续我们的总结: 第五,在回复评论后如何保持滚动条的位置不变: <%@ Page Title="新闻内容-牛腩新闻发布系统" Language="C#" MasterPageFile="~/common.Master" AutoEventWireup="true" CodeBehind="newsContent.aspx.cs" Inherit

硬件驱动程序的知识点滴

一.认识硬件驱动程序 在安装完操作系统后,电脑还不能正常使用,因为此时电脑的屏幕还不是很清晰. 分辨率还不是很高,甚至可能没有声音,因为电脑还没有安装驱动程序.那么什么是驱动程序呢? 如果电脑中某个设备的驱动程序未能正确安装,该设备便不能正常工作.因此,驱动程序在系统中所占有重要地位.一般来说操作系统安装完毕后,首先要安装硬件设备的驱动程序. 常见的驱动程序的文件扩展名有以下几种: .dll  .drv  .exe  .sys   .vxd    .dat    .ini    .386   .

闲聊网络知识点滴心得

首先声明,同行们随便看看即可,如若欲喷,还望轻喷.说到网络就不得不提及OSI七层,一些疑难杂症通常都常出现在前四层上.而第五层的会话层方面,我们顶多也就会遇到一些关于地址映射方面的问题罢了.在处理网络故障的时候,虽然大体也都是按照先软后硬的原则进行操作.不过更多的时候随经验和专业知识的积累,不一定就非要先从软件方面着手去查找问题.例如:当你在遇到网络大面积瘫痪,且已经看到一台交换机的端口指示灯不停狂闪的时候,你还有必要在第一时间去抓包吗?当然,为了彻底根治某些故障,确实需要我们进行彻查.但作为一

Linux知识点滴:RedHat和Centos

Redhat有收费的商业版和免费的开源版,商业版的业内称之为RHEL(Red Hat Enterprise Linux)系列, 而这个CentOS(Community ENTerprise Operating System)是来自于RHEL依照开放源代码规定释出的源代码所编译而成. 可以用CentOS替代商业版的RHEL使用. 两者的不同,在于CentOS并不包含封闭源代码软件. CentOS并不是全新的Linux发行版,倘若一说到Red Hat这个大名,大家似乎都听过.在Red Hat家族中有

C++ 与 CDC相关的知识,点滴总结

hdc = GetDC (hwnd) ; GetDc函数:用于获得hWnd参数所指定窗口的客户区域的一个设备环境. 所获得的设备环境可以是通用.类或者私有类型,具体由指定窗口的类风格决定.对于通用设备环境,GetDc函数每次获取一个设备环境时都会用默认属性对它进行初始化. 该函数获得的类和私有设备环境会与它们最后一次的设置保持一致.当设备环境不再需要时,应该调用ReleaseDC函数将其释放. GetWindowDC函数: 返回hWnd参数所指定的窗口的设备环境. 获得的设备环境覆盖了整个窗口(

linux工作知识点滴

1. 要学会使用ldd *.so来查看动态库所依赖的库,以排除一些异常错误. 2. ldconfig是一个动态链接库管理命令,ldconfig命令的用途,主要是在默认搜索目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件,缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表,ldconfig通常在系统启动时运行,而

Java 基础知识点滴(1)

1. ==与equals的区别 ==是用来判断两个变量的值是否相等.要比较两个基本变量或引用变量是否相等,只能用==: equal用来判断两个独立对象里面的内容是否一样. 例子: String s1 = "111"; String s2 = "111"; s1与s2是两个独立的对象,如果直接用“s1==s2”则会返回false,虽然他们里面的内容一样,但是s1,s2为引用变量,其值实际上是一个内存地址,两个独立对象的内存地址 是不一样的.因此“s1==s2”的结果为

matplotlib之pyplot 知识点滴

以下是一些常用地址链接,请参考 matplotlib 官方网址 plt.plot()函数细节 Matplotlib 中文用户指南 4.6 编写数学表达式 原文地址:https://www.cnblogs.com/cjtds/p/9081366.html

Unix And Linux

摘抄与于:http://www.cnblogs.com/awpatp/category/200255.html vi命令速查图 摘要: Lesson 1 Lesson 2 Lesson 3 Lesson 4 Lesson 5 Lesson 6 Lesson 7阅读全文 [转载]Putty中文乱码解决方法 摘要: 以下解决方案内容转自百草园的文章<<putty 中文乱码解决方法>> 方法一: 打开putty主程序,选择window-〉Appearance-〉Font settings