Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compression 我们应该使用什么压缩格式;我们应该躺下来休息吗?_Compression_Zip_Gzip_7zip_Winrar - Fatal编程技术网

Compression 我们应该使用什么压缩格式;我们应该躺下来休息吗?

Compression 我们应该使用什么压缩格式;我们应该躺下来休息吗?,compression,zip,gzip,7zip,winrar,Compression,Zip,Gzip,7zip,Winrar,随着大多数Linux发行版放弃gzip和bzip2,转而使用LZMA2来压缩它们的软件包,以及许多平台的开源实现,我想知道:我们是否应该停止使用DEFLATE和.zip格式(不幸的是,这种格式被一再地贬损),转而使用其他现代方式来分发我们的软件包(来源)软件包 GNU tar支持J开关,该开关使用xz(另一个LZMA2压缩机)作为过滤器: $ tar cJf foo.tar.xz foo/ 然而,我倾向于在Linux下使用7z(p7zip实现)和它的朋友7za来创建归档文件。在创建归档文件时,

随着大多数Linux发行版放弃gzip和bzip2,转而使用LZMA2来压缩它们的软件包,以及许多平台的开源实现,我想知道:我们是否应该停止使用DEFLATE和
.zip
格式(不幸的是,这种格式被一再地贬损),转而使用其他现代方式来分发我们的软件包(来源)软件包

GNU tar支持
J
开关,该开关使用
xz
(另一个LZMA2压缩机)作为过滤器:

$ tar cJf foo.tar.xz foo/
然而,我倾向于在Linux下使用
7z
(p7zip实现)和它的朋友
7za
来创建归档文件。在创建归档文件时,我仍然使用“避免焦油炸弹”范例,这意味着归档文件中有一个目录,因此从命令行提取不会导致溢出当前目录中的文件(这是Linux上的标准操作方式,使用的是
tar
,但在Windows下似乎不太常见)

无论如何,似乎是由于在软件包(例如Fedora RPM和Ubuntu DEBs)中的使用,以及像
tar
这样的工具的过滤器,LZMA2是继bzip2之后使用的“下一个最好的东西”。它有很高的压缩率(在标准设置中远远超过bzip2),而且速度也非常快(压缩比gzip稍慢

我自己做了一些基准测试,但我想重点介绍一些更广泛的基准测试:

  • 基于评级的基准
  • 基于效率的基准
现在,您会注意到,这是参考实现,并没有出现在第一位。但是Freearc使用它自己的
.arc
格式,这不是真正的跨平台功能,与80年代的旧arc不兼容。nanozip不是开源的,这是一种衰退,但重要的是算法,而不是arc海弗

无论如何,现在7-zip及其派生实现()的性能不再是一个问题,压缩比本身就说明了这一点,我想将我的源程序包作为
.7z
.tar.xz
存档分发。然而,我面前有两个障碍,我似乎无法克服:

  • WinRAR的支持者。 别误会我的意思,我对WinRAR或其用户没有怨恨,只是我不能在Linux上真正制作RAR,也没有必要,因为我们有免费的LZMA2工具。正如我所说,自从成为发行包的一个组成部分以来,任何现代发行版都可以使用它。因为制作
    .7z
    .rar
    相比,LZMA2文件通常更小,我不明白为什么不使用7-zip

  • tar存档必须是zip或bzip2,没有例外。 这是一个困难的问题。为什么这么多人对gzip印象深刻?即使是bzip2在大多数情况下也看不到太多的使用。诚然,gzip很快,在web服务器或创建大型镜像备份等按需压缩时是一个很好的点。但是分发软件呢?LZMA2是非常不对称的。而压缩则需要它的时间输入法,解压速度极快

  • 好的,现在我的问题来了:

    既然LZMA2可以说是下一个更好的压缩算法,为什么人们不跳上火车呢?为什么人们仍然使用WinRAR,它是专有的,压缩比更差,并且没有移植到Linux(除了
    unrar
    ,但是你显然不能用它创建存档)。为什么Tarball仍然主要是gziped

    有没有办法说服人们转向更新、可靠的归档格式,这不仅是跨平台的,而且是免费的?当我给某人一个以
    .7z
    结尾的文件时,他们往往不知道如何处理它,这会改变吗

    哦,这是我自己做的小基准测试。我在所有地方都使用默认设置:

    11837440 GNUtar_TAR.tar
    10657984 Arc_ARC.arc
    9632524 PA2010_TAR_BZip2.tar.bz2
    9536967 PA2010_LHA_Frozen5.lzh
    9510148 PA2010_ZIP_BZip2.zipx
    9490211 GNUtar_TAR.tar.bz2
    9467242 PA2010_LHA_Frozen6.lzh
    9463630 7-zip_ZIP_BZip2.zip
    9437520 7-zip_7-ZIP_BZip2.7z
    9398798 Arj_ARJ.arj
    9373435 GNUtar_TAR.tar.gz
    9370456 PA2010_BlackHole_Deflate.bh
    9369621 Lha_LHA_Frozen6.lzh
    9367712 PA2010_ZIP_Deflate.zip
    9364237 PA2010_TAR_gzip.tar.gz
    9360248 PA2010_Cabinet_MsZip.cab
    9303923 7-zip_ZIP_Deflate.zip
    9215279 7-zip_ZIP_Deflate64.zip
    9189365 PA2010_ZIP_PPMd.zipx
    9060663 PA2010_7-ZIP_PPMd.7z
    8931280 PA2010_Cabinet_LZX.cab
    8847427 7-zip_7-ZIP_PPMd.7z
    8803350 PA2010_ZIP_Optimized.zipx
    8803350 PA2010_ZIP_Wavpack.zipx
    8802850 PA2010_ZIP_LZMA.zipx
    5812491 FreeArc_7-ZIP.arc
    5789853 7-zip_7-ZIP_LZMA.7z
    5789853 PA2010_7-ZIP_LZMA.7z
    5789024 GNUtar_TAR.tar.xz
    5782637 FreeArc_UHARC.arc
    5770969 FreeArc_CCM.arc
    5739697 Fp8_5.fp8
    5718865 Fp8_8.fp8
    5685234 Paq8px_5.paq8px
    5677662 Paq8kx_5.paq8kx
    5644422 Paq8px_8.paq8px
    5609608 Paq8kx_8.paq8kx
    
    (大小以字节为单位;文件名:
    Archiver\u格式\u算法。扩展名

    该文件集由磁盘映像组成,其中包含DOS安装:

    1474979 disk01.144
    1474979 disk02.144
    1474979 disk03.144
    1474979 disk04.144
    1474979 disk05.144
    1474979 ldisk01.144
    1474979 ldisk02.144
    1474979 ldisk03.144
    24325 diskcopy.com
    

    (字节大小)

    过去bz2不是tarball的选项。后来有人在GNU Tar中添加了创建和读取bz2存档的选项,很快这种格式开始传播。因此答案是:


    如果你相信LZMA,然后提交补丁到自由软件基金会(所有适当的文书工作)你会让世界变得更美好。

    我并不是专门谈论tarball。ZIP和WinRAR在Windows上仍然很流行,虽然7-ZIP已经存在多年了,但它似乎没有被接受。而且,正如我在问题中所说,LZMA已经在GNU tar中了。