我正在寻找有关在.NET中压缩数据的一些建议,除了使用GZipStream
类。
我正在寻找字节数组的快速和高压缩,以便能够通过TCP发送它们。
答案 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实现,可在此处免费下载:
Wikipedia on compression algorithms:
7z的LZMA算法达到更高 压缩比大于RAR,除了 “多媒体”文件,如.wav和.bmp RAR使用专门的文件 比LZMA更优越的惯例。[7] 其他免费压缩软件等 通常是NanoZip和FreeArc 优于WinRAR。[8]