Почему сжатие небольшого файла при помощи gzip / deflate приводит к большому количеству конечных нулей?

Я использую следующий код для сжатия небольшого (~ 4 КБ) HTML-файла в C #.

byte[] fileBuffer = ReadFully(inFile, ResponsePacket.maxResponsePayloadLength); // Read the entire requested HTML file into a memory buffer
inFile.Close();                                                                 // Close the requested HTML file

byte[] payload;
using (MemoryStream compMS = new MemoryStream())                                       // Create a new memory stream to hold the compressed HTML data
{
    using (GZipStream gzip = new GZipStream(compMS, CompressionMode.Compress))            // Create a new GZip object pointing to the empty memory stream
    {
        gzip.Write(fileBuffer, 0, fileBuffer.Length);                                   // Compress the file buffer and write it to the empty memory stream
        gzip.Close();                                                                   // Close the GZip object
    }
    payload = compMS.GetBuffer();                                            // Write the compressed file buffer data in the memory stream to a byte buffer
}

Результирующие сжатые данные составляют около 2 тыс., Но около половины из них - просто нули. Это для приложения, очень чувствительного к пропускной способности (поэтому я в первую очередь стараюсь сжать 4 КБ), поэтому дополнительные 1 КБ нулей - это пустая трата драгоценного пространства. Моим лучшим предположением будет то, что алгоритм сжатия дополняет данные до границы блока. Если так, есть ли способ переопределить это поведение или изменить размер блока? Я получаю те же результаты с ванильным .NET GZipStream и ZZIB GZipStream, а также DeflateStream.

Ответы на вопрос(1)

Ваш ответ на вопрос