Попробуйте этот метод расширения.Поток останется открытым (см. Конструктор GZipStream).Положение потока устанавливается на 0 после того, как сжатие выполнено.
public static void GZip(this Stream stream, byte[] data)
{
using (var zipStream = new GZipStream(stream, CompressionMode.Compress, true))
{
zipStream.Write(data, 0, data.Length);
}
stream.Position = 0;
}
Вы можете использовать следующий тест:
[Test]
public void Test_gzip_data_is_restored_to_the_original_value()
{
var stream = new MemoryStream();
var data = new byte[]{1,2,3,4,5,6,7,8,9,10};
stream.GZip(data);
var decompressed = new GZipStream(stream, CompressionMode.Decompress);
var data2 = new byte[10];
decompressed.Read(data2,0,10);
Assert.That(data, Is.EqualTo(data2));
}
Для получения дополнительной информации см .: http://msdn.microsoft.com/en-us/library/hh158301(v=vs.110).aspx