Ionic.zlib прекращает сжатие, когда сжатый файл достиг 65536 байт?- C # - PullRequest
0 голосов
/ 15 мая 2011

Эй, у меня проблемы со сжатием файлов с помощью Ionic.zlib, я очень плохо знаком с C #, поэтому проблема может быть легко решена. Если я сожму большой файл, скажем, размером 500 КБ, то после того, как сжатый файл достигнет 65536 байт, он остановится, если я затем распакую файл, то пропадет много данных: /. Я могу исправить это, установив буфер равным 4 000 000, но я слышал, что лучше всего установить его в 0x4000.

        ZlibStream compressor = new ZlibStream(gsc_stream, CompressionMode.Compress, CompressionLevel.BestCompression, true);
        byte[] buffer = new byte[0x4000];
        Int32 n;

        int previous = Convert.ToInt32(zone.Position);

        while ((n = compressor.Read(buffer, 0, buffer.Length)) != 0)
        {
            zone.Write(buffer, 0, n);

        }
        zone.Flush();
        compressor.Flush();

1 Ответ

1 голос
/ 15 мая 2011

Похоже, у вас все наоборот.
Если вы пытаетесь сжать файл в потоке gsc_stream и записать результат в поток zone, тогда правильный код будет выглядеть так:

using (ZlibStream compressor = new ZlibStream(zone, CompressionMode.Compress, CompressionLevel.BestCompression, true))
{
    byte[] buffer = new byte[0x4000];
    int n;
    while ((n = gsc_stream.Read(buffer, 0, buffer.Length)) != 0)
    {
        compressor.Write(buffer, 0, n);
    }
    zone.Flush();
    compressor.Flush();
}
...