Вы забыли сбросить. :) Обратите внимание, что Encoding.Default обычно не следует использовать в производстве. В приведенном ниже тексте замените его на Encoding.UTF8 (или что угодно). Наконец, конечно, приведенная ниже проверка santiy работает, только если все помещается в один буфер. Но теперь вы должны понять.
Кементеус указал, что мой предыдущий код здесь не помог, поэтому ниже приведен точный код, который я использовал:
public class GzipBug
{
public static void Main(String[] a)
{
byte[] bytes;
byte[] buffer;
Encoding encoding = Encoding.UTF8;
using (var memory_stream = new MemoryStream())
using (var gzip_stream = new GZipStream(memory_stream, CompressionMode.Compress))
{
buffer = encoding.GetBytes("Hello nurse!");
gzip_stream.Write(buffer, 0, buffer.Length);
gzip_stream.Flush();
bytes = memory_stream.ToArray();
}
int total_read = 0;
using (var input_stream = new MemoryStream(bytes))
using (var gzip_stream = new GZipStream(input_stream, CompressionMode.Decompress, true))
{
int read;
buffer = new byte[4096];
while ((read = gzip_stream.Read(buffer, 0, buffer.Length)) != 0) {
total_read += read;
}
}
Debug.WriteLine(encoding.GetString(buffer, 0, total_read));
Debug.WriteLine(total_read);
}
}
Он составлен из:
gmcs -d: DEBUG -langversion: linq -debug + GzipBug.cs
и запустить как:
MONO_TRACE_LISTENER = Console.Out GzipBug.exe
(вы можете удалить бит MONO_TRACE_LISTENER)