压缩文件格式和压缩算法的那些事

压缩文件格式和压缩算法的那些事

关于压缩文件,经常会遇到,zip,gzip,tar等压缩格式,这些压缩格式有什么区别?还经常遇到deflate,LZMA等压缩算法,这些压缩算和压缩格式有什么区别呢?本文将介绍这方面的内容。

文件格式

首先,被压缩的文件都会存储为特定的文件格式,因此压缩格式也就是对应的文件格式,其中7z软件支持如下图1几种压缩文件格式: 图1 .7z,.zip,.tar,.wim,gzip,bzip2,xz这几种文件格式可以分成三类,即针对文件的和针对文件夹的压缩。

针单个文件压缩

gzip,bzip2,xz这三种文件格式只支持压缩,不支持打包,因此是只针对单个文件的压缩文件格式,如下图2:: 图2 图2是针对pcapng文件采用gzip压缩,且只支持deflate压缩算法。bzip2,xz两种压缩格式可以自行查看之。

针对文件夹打包

其中.tar,.wim,只支持打包,即将多个文件合成一个文件,不支持压缩,如下图3是针对文件夹的打包,可以看到压缩等级为仅存储,file-folder是文件夹:

图3 经常遇到的.tar.gz文件,就是先对文件采用tar格式进行打包,在使用gzip文件格式压缩。

针对文件和文件夹打包和压缩

其中.7z,.zip即支持打包,又支持压缩,如下图4是针对文件夹的打包和压缩: 图4 可以看到zip文件格式既能打包文件夹中的文件,又能够对文件夹中的数据进行压缩,支持deflate等多种压缩算法,7z文件格式可自行查看之。

对于上述的打包和压缩,都会存成对应的文件,即gz,.tar,.xz,.zip,bzip2等后缀格式的文件,这些特定格式的文件都是具备一定的文件格式,也就是具备文件特征的,往往在文件的开头,如下:

例如gz格式文件的signature 是 1F 8B例如tar格式文件的signature 是 75 73 74 61 72例如7z格式文件的signature是 37 7A BC AF 27 1C例如bzip2格式文件的signature 是 42 5A 68

更多文件格式详见这里。

压缩算法

压缩算法就是在对文件或者文件夹压缩时候采用的方法,常见的压缩算法包括deflate,LZMA,LZ4等。每一种文件压缩格式则可能会根据需要采用不同的压缩算法。

7z格式支持的压缩压缩算法为,如下图5: 图5

zip格式支持的压缩压缩算法为,如下图6: 图6

gzip格式支持的压缩压缩算法为,如下图7: 图7 bzip2格式支持的压缩压缩算法为,如下图8: 图8

xz格式支持的压缩压缩算法为,如下图9: 图9

混合压缩

严格的来说上述出现的deflate,LZMA ,bzip2算法并不是一种具体的压缩算法,而是一种混合压缩算法或者一种新的而数据结构,deflate结构封装了LZ77算法和哈夫曼算法,详见之前的文章,这里。只是在实际工程应用过程中,已经习惯称defalte为压缩算法了。详见这里,如下图10:

图10 通过图10可以看到前面的压缩算法大多数都是混合压缩算法,即多种压缩算法的结合。

为什么要区别混合压缩和压缩算法呢,这是因为对于混合压缩,往往会定义数据的结构,即有头有尾,是一种结构化的数据。因此在解析的时候需要按照一定的数据格式进行解析,数据不完整会导致解析解压失败。而对于单纯使用压缩算法压缩的数据,即使缺少一部分尾部数据,由于其没有特定文件结构,逐个字节解析有的时候是能够解析成功。

总结

总的来说文件格式就是一种数据结构,表示该种数据是如何被组织和存储的。数据格式封装了多种压缩算法,会定义新的数据结构。压缩算法则是具体用来介绍文件大小的方法。

有的时候数据会被存储为特定的文件结构,因此需要使用特定的软件解析该文件结构,然后解压缩。有的时候数据直接被特定算法压缩,形成一段文件数据流,这个时候和文件格式无关,只需要用指定的解压缩算法解压即可。

针对特定的文件格式,可以使用7z等解压缩软件,那么针对一段被压缩的数据流,例如HTTP等协议中的压缩数据,如何快速的解压缩呢,将在下一篇文章中《Cyberchef使用功能之-多种压缩操作对比》讲述,详见这里。

本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里。

相关推荐

Windows XP / 7 中删除访问局域网共享时保存的用户名和密码
小火车英语怎么说

小火车英语怎么说

09-01 👁️‍🗨️ 6671
凌家卫岛机场三字代码

凌家卫岛机场三字代码

07-27 👁️‍🗨️ 6850
梦幻西游开3孔一般需要开几次?(梦幻西游开3孔需要花多少钱)
如何更改微信聊天时间

如何更改微信聊天时间

10-23 👁️‍🗨️ 4570