SharpZipLib中应选择哪种压缩类型?

5
我有一个文件传输应用程序,可以发送文件和文件夹(服务器-客户端)。
我正在尝试通过TCP(套接字)发送数据,我已经为数据传输制定了一些规则,因此如果发送的是包含多个文件的大文件夹,则应该首先将它们压缩成一个单独的zip文件,然后在发送该zip文件时,接收方必须对其进行解压缩。
因此,我决定使用SharpZibLib,但我有一个问题。
  • 我应该选择哪种类型的压缩方式来适用于我的应用程序?
    我了解了ZIP和GZIP之间的区别,并发现GZIP具有更好的压缩能力以减小文件大小,而且我不需要从GZIP文件中提取特定文件,所以无需使用ZIP!
    但在该库中,还有许多我仍不知道的类型,那么我应该使用GZIP还是其他类型更适合我的应用程序?
  • enter image description here

    附言: 首要考虑的是时间,使用SharpZipLib的目的是将(太多的文件)压缩到一个文件中,这样发送会比单独发送(太多的文件)要快得多。
    更多细节在这里


    @KenWhite 我已编辑问题,对答案有什么想法吗? - Murhaf Sousli
    不好意思,我从未使用过SharpZipLib。不过你提出的问题非常详细,让人印象深刻。我的建议是编写一个快速测试应用程序,使用各种压缩算法来压缩相同的数据,并与您的特定数据比较速度,然后您就可以选择最适合您所做的工作的压缩算法了。 - Ken White
    为什么要使用SharpZipLib?System.IO.Compression中的GZip压缩很好,而且速度快。它在.NET 4.0中得到了大大改进。 - Jim Mischel
    Zip和GZip是不同的格式,但是它们都在内部使用deflate算法。Deflate是LZ77编码和Huffman编码的组合。而LZW基于不同的LZ78编码。BZip2又是一种不同的算法(基于Burrows-Wheeler变换)。Tar只是将许多文件合并成一个文件,并不提供任何压缩功能。你可能需要进行现场测试以确定哪种算法最适合你,平均压缩比率、压缩速度和解压速度(deflate提供非常快的解压速度)都是需要考虑的因素。 - Cameron
    这并不是Cameron说的。他(和我)建议你应该使用各种选项进行测试,以确定哪个选项在速度方面最适合您的特定数据。你应该阅读整个回复。 :) - Ken White
    显示剩余4条评论
    1个回答

    1
    为了提高速度,您应该使用gzip / zip。我认为该库允许您选择压缩级别。您应该尝试低级别,例如1到4,以查看哪种速度和压缩程度最适合您的应用程序。
    在相同的压缩效果下,gzip / zip的速度比LZW更快。我发现压缩级别3比LZW更快,压缩效果也更好。
    bzip2将比gzip / zip压缩得更好,但需要更长时间。
    其他选择不是压缩器。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接