public void flush()
{
byte[] uncompressed_bytes = uncompressed_output.ToArray();
// write uncompressed size to output
new BinaryWriter(output).Write((UInt32)uncompressed_bytes.Length);
// write the compressed data
GZipOutputStream zipstream = new GZipOutputStream(this.output);
zipstream.SetLevel(1); // 0 is no compression, 9 is best compression (slowest)
zipstream.Write(uncompressed_bytes, 0, uncompressed_bytes.Length);
zipstream.Finish();
}