【问题标题】: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 文件很可能包含压缩的条目。您可以使用任何解压缩器列出内容并找出。