关于压缩文件,经常会遇到,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使用功能之-多种压缩操作对比》讲述,详见这里。
本文为优快云村中少年原创文章,未经允许不得转载,博主链接这里。