title: Compress and decompress a Stream with Compression.DeflateStream
body: <p>I am trying to compress and decompress a Stream using <a href="http://msdn.microsoft.com/en-us/library/system.io.compression.deflatestream.aspx" rel="noreferrer">Compression.DeflateStream</a>. Compressing seems to work correctly since the code below compresses my Stream to a 110 bytes long array. However, reading the decompressed Stream results in an empty string.</p>
  
  <pre><code>class Program
  {
      static void Main(string[] args)
      {
          // Compress a random string value
          string value = Path.GetRandomFileName();
          byte[] compressedBytes;
  
          using (var writer = new StreamWriter(new MemoryStream()))
          {
              writer.Write(value);
              writer.Flush();
              writer.BaseStream.Position = 0;
  
              compressedBytes = Compress(writer.BaseStream);
          }
  
          // Decompress compressed bytes
          Stream decompressedStream = Decompress(compressedBytes);
          // here already applies: decompressedStream.Length == 0
  
          using (var reader = new StreamReader(decompressedStream))
          {
              string decompressedValue = reader.ReadToEnd();
  
              if (value == decompressedValue)
                  Console.WriteLine("Success");
              else
                  Console.WriteLine("Failed");
          }
      }
  
      private static byte[] Compress(Stream input)
      {
          using (var compressStream = new MemoryStream())
          using (var compressor = new DeflateStream(compressStream, CompressionMode.Compress))
          {
              input.CopyTo(compressor);
              return compressStream.ToArray();
          }
      }
  
      private static Stream Decompress(byte[] input)
      {
          var output = new MemoryStream();
  
          using (var compressStream = new MemoryStream(input))
          using (var decompressor = new DeflateStream(compressStream, CompressionMode.Decompress))
              decompressor.CopyTo(output);
  
          output.Position = 0;
          return output;
      }
  }
  </code></pre>
  
  <p>Can anyone help me on this one?
  Many thanks.</p>