首页 > 解决方案 > Zlib 在 C# 中按块压缩大文件

问题描述

我需要一些有关 zlib 压缩大文件的帮助。我的问题是我无法将文件逐块压缩到我一次性压缩的相同级别。当我按块进行压缩时,压缩的结果会稍大一些。但是,我需要将文件压缩为与一次性压缩文件的大小相同。我已经用 C# 编写了我的应用程序。我很感激如果你能请看一看并给我你的建议。
注意:我同时使用了 DotNetZip 和 SharpZipLib 库,发现这两个库的压缩结果也不同。

       int len = 1 <<16;
       int partSize = 5 <<16;   
       MemoryStream ms = new MemoryStream();
       //ZlibStream streamCompressed = new ZlibStream(ms, CompressionMode.Compress, CompressionLevel.Default);
       DeflaterOutputStream streamCompressed = new DeflaterOutputStream(ms,  new Deflater( Deflater.DEFAULT_COMPRESSION, false ),len);
       try
       {
         using var sourceFile = new BinaryReader(File.OpenRead(FilePath));
         while ((bytesToRead = sourceFile.Read(chunk, 0, len)) > 0)
         {
           streamCompressed.Write(chunk, 0, bytesToRead);
           compData = ms.ToArray();
           ms.Position = 0;
           ms.SetLength(0);
           data = AddArrayToArray(data, compData);
           if (data.Length >= partSize)
           {
             //UPLOAD DATA 
           }
        }
        ms = new MemoryStream();
        streamCompressed.Flush();
        compData = ms.ToArray();
        data = AddArrayToArray(data, compData);
        //UPLOAD THE LAST PART OF DATA
       }

标签: c#compressionzlibdeflate

解决方案


推荐阅读