【问题标题】:C++ and SharpZipLibC++ 和 SharpZipLib
【发布时间】:2017-04-22 16:27:26
【问题描述】:

在压缩算法方面我不是很精通。

我有一段 C# 代码使用上述库来压缩和解压缩一大块数据。它使用压缩级别 3,但除此之外,它是最基本的实现。

我现在想用 c++ 对这些数据做同样的事情。既然是 zip 格式,我们说的是 deflate 算法吧?

我是否正确假设任何处理 zip 压缩的 c++ 库都使用该算法并且它与 C# 版本兼容? 3 级压缩是 zip 标准,还是 C# lib 独有的东西?

基本上,在寻找库并将其实施到我的代码中时,我需要注意什么(如果有的话)?

【问题讨论】:

    标签: c# c++ zip compression


    【解决方案1】:

    既然是 zip 格式,我们说的是 deflate 算法吧?

    并非所有 .zip 文件都使用 DEFLATE 算法。 ZIP 规范列出了它支持的大量不同的压缩方法:

    4.4.5 compression method: (2 bytes)
    
        0 - The file is stored (no compression)
        1 - The file is Shrunk
        2 - The file is Reduced with compression factor 1
        3 - The file is Reduced with compression factor 2
        4 - The file is Reduced with compression factor 3
        5 - The file is Reduced with compression factor 4
        6 - The file is Imploded
        7 - Reserved for Tokenizing compression algorithm
        8 - The file is Deflated
        9 - Enhanced Deflating using Deflate64(tm)
       10 - PKWARE Data Compression Library Imploding (old IBM TERSE)
       11 - Reserved by PKWARE
       12 - File is compressed using BZIP2 algorithm
       13 - Reserved by PKWARE
       14 - LZMA (EFS)
       15 - Reserved by PKWARE
       16 - Reserved by PKWARE
       17 - Reserved by PKWARE
       18 - File is compressed using IBM TERSE (new)
       19 - IBM LZ77 z Architecture (PFS)
       97 - WavPack compressed data
       98 - PPMd version I, Rev 1
    

    我是否正确假设任何处理 zip 压缩的 c++ 库都使用该算法并且它与 C# 版本兼容?

    真正由库作者决定他们支持什么,尽管 DEFLATE 应该由于其广泛使用而在几乎每个压缩库中实现。但并非所有库都与 SharpZipLib 兼容,因为不同的程序员对于如何最好地组织他们的代码会有不同的想法。

    3 级压缩是 zip 标准,还是 C# lib 独有的东西?

    这是标准的一部分。

        4 - The file is Reduced with compression factor 3
    

    基本上,在寻找库并将其实施到我的代码中时,我需要注意什么(如果有的话)?

    确保库支持您想要使用的任何压缩方法,确保 API 对您有意义,并尝试查找所使用库的基准以查看它的速度。如果您需要处理 zip 数据而不是读写磁盘,请确保库可以写入流或字节缓冲区以通过网络发送。

    Link 到 ZIP 规范。

    【讨论】:

      【解决方案2】:

      压缩级别是速度与压缩时选择的压缩比的权衡。它与解压器的解压能力没有任何关系。

      您的 zip 文件很可能包含压缩的条目。您可以使用任何解压缩器列出内容并找出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-04
        相关资源
        最近更新 更多