.NET压缩库的建议

时间:2010-06-15 15:19:09

标签: c# compression

我正在寻找有关在.NET中压缩数据的一些建议,除了使用GZipStream类。

我正在寻找字节数组的快速和高压缩,以便能够通过TCP发送它们。

5 个答案:

答案 0 :(得分:11)

如果要压缩数据,那么您可能会考虑高密度序列化而不是压缩。像protobuf这样的东西。有一个few C# implementations here。对于现有对象,protobuf-net是最容易实现的IMO(披露:我是作者 - 但它是免费的等等)。您只需序列化到流,或者如果您想要byte[],则需要单独MemoryStream

对于连续使用套接字(而不是HTTP的谨慎请求/响应),我建议查看Serializer.SerializeWithLengthPrefix / Serializer.DeserializeWithLengthPrefix操作(protobuf doesn' t 本身包含一个终结符,因此处理单独的消息需要长度前缀。)

答案 1 :(得分:9)

DotNetZip提供原生支持,并且有一个非常友好的API,我认为比SharpZipLib更灵活:

  

DotNetZip

编辑:不幸的是, DotNetZip 有一些关键问题,项目似乎不再积极维护。因此,实际上不建议在生产代码中使用此库。

更好的替代方案是使用SharpZipLib(如果您遵守他们基于GPL的许可证),.NET ports of zlib之一或.NET 4.5的zip支持,如this answer所示。

答案 2 :(得分:4)

SharpZipLib是另一种选择。据说它比框架库GZipStream

更有思想

答案 3 :(得分:1)

.NET 3+现在内置Zip支持,ZipPackage类。

答案 4 :(得分:1)

LZMA应该是最好的压缩之一。 7-Zip是LZMA的公共域SDK实现,可在此处免费下载:

http://www.7-zip.org/sdk.html

Wikipedia on compression algorithms

  

7z的LZMA算法达到更高   压缩比大于RAR,除了   “多媒体”文件,如.wav和.bmp   RAR使用专门的文件   比LZMA更优越的惯例。[7]   其他免费压缩软件等   通常是NanoZip和FreeArc   优于WinRAR。[8]