C# 最佳.NETFramework压缩类?
是的,我知道GZipStream或deflatesttream是.NETFramework中处理压缩/解压缩的常用工具 我希望在我的程序中有压缩/解压缩功能,但是C# 最佳.NETFramework压缩类?,c#,compression,C#,Compression,是的,我知道GZipStream或deflatesttream是.NETFramework中处理压缩/解压缩的常用工具 我希望在我的程序中有压缩/解压缩功能,但是 我希望是一个.NET Framework C#one,而不是第三方开源。我不能使用,因为我的程序有版权限制 GZipStream和deflatesttream不是很好。例如,GZipStream将文件压缩到480KB,而7Zip将同一文件压缩到57KB 微软有其他好的压缩方法吗 谢谢GZipStream和deflatesttream专
谢谢GZipStream和deflatesttream专门用于压缩流,而不是用于存储的一般文件压缩
除了这些类之外,压缩并没有内置到.NET中。如果你想要高质量的压缩,你必须去第三方库。查看一个开源的7zip库。我没有任何关于压缩率的统计数据,但我使用该库多年来取得了很大成功。有一个7zip的托管包装器。许可证是LGPL,因此您可以在封闭源代码项目中使用它。我不知道这是否符合您的许可证要求,因为您没有说明这些要求
您也可以将开源ZLib()与PInvoke一起使用,或者使用包装器(我已经使用了ZLib.net,但我相信它有一些bug)。
它不如托管库方便,但比DeflateStream/GZipStream(除了GZipStream中的一个额外的CRC之外,它们是相同的)更高效。好吧,我尝试像递归数据一样压缩,这很有趣。请看我的例子:
private byte[] CompressWithLevels(byte[] data)
{
using(MemoryStream ms = new MemoryStream())
{
using(GZipStream gz = new GZipStream(ms, CompressionMode.Compress))
{
gz.Write(data, 0, data.Length);
return ms.ToArray();
}
}
}
现在,我尝试压缩一个太大的文件,例如:
string path = @"c:\test.bin";
byte[] buffer = File.ReadAllBytes(path);
byte[] level1 = CompressWithLevels(buffer);
byte[] level2 = CompressWithLevels(level1);
检查缓冲区、级别1和级别2的大小。缓冲区大小为77683,级别1=57354,级别2=8202 缓冲区为100%,则:
57354为73,83%
8202是10,55%
很有趣。该网页声明“LZMA SDK位于公共领域”,这应该意味着它可以自由使用,无论你喜欢什么,不是吗?Dave指出了正确的方向,但Stefan提供了指向7zip算法(即LZMA)的现成.Net实现的链接。绝对免费。OP说他不想要“第三方开源”。如果成本不是问题,我不知道是什么。只是想与未来的人分享;C#拥有ZipArchive类。如果与最佳压缩选项一起使用,您可能也会得到很好的效果。谢谢您的回复。我可以问一下DeflateStream是否正在使用哈夫曼编码吗?
DeflateStream
和GZipStream
都使用LZ77算法和哈夫曼编码的组合(请参阅和)Deflate
是纯压缩算法,而GZipStream包含一个CRC校验和,可以通过编写不同的压缩算法进行扩展(当前的.net框架只实现了一个压缩算法)。这很有趣。。。它倒回去了吗?限制是多少?