Zlib Сжатие большого файла кусками в C# - PullRequest
0 голосов
/ 02 апреля 2020

Мне нужна помощь с сжатием zlib большого файла. Моя проблема в том, что я не могу сжать файл чанком до того же уровня, что я сжимаю его одним go. Результат сжатия, когда я делаю это кусками, немного больше. Однако мне нужно сжать файлы до того же размера, что и в одном go. Я закодировал свою заявку в 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
       }
...