C# 最佳.NETFramework压缩类?

C# 最佳.NETFramework压缩类?,c#,compression,C#,Compression,是的,我知道GZipStream或deflatesttream是.NETFramework中处理压缩/解压缩的常用工具 我希望在我的程序中有压缩/解压缩功能,但是 我希望是一个.NET Framework C#one,而不是第三方开源。我不能使用,因为我的程序有版权限制 GZipStream和deflatesttream不是很好。例如,GZipStream将文件压缩到480KB,而7Zip将同一文件压缩到57KB 微软有其他好的压缩方法吗 谢谢GZipStream和deflatesttream专

是的,我知道GZipStream或deflatesttream是.NETFramework中处理压缩/解压缩的常用工具

我希望在我的程序中有压缩/解压缩功能,但是

  • 我希望是一个.NET Framework C#one,而不是第三方开源。我不能使用,因为我的程序有版权限制


  • GZipStream和deflatesttream不是很好。例如,GZipStream将文件压缩到480KB,而7Zip将同一文件压缩到57KB

  • 微软有其他好的压缩方法吗


    谢谢

    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框架只实现了一个压缩算法)。这很有趣。。。它倒回去了吗?限制是多少?