title: Compression/Decompression string with C#
body: <p>I am newbie in .net. I am doing compression and decompression string in C#. There is a XML and I am converting in string and after that I am doing compression and decompression.There is no compilation error in my code except when I decompression my code and return my string, its returning only half of the XML.</p>
  
  <p>Below is my code, please correct me where I am wrong.</p>
  
  <p>Code:</p>
  
  <pre><code>class Program
  {
      public static string Zip(string value)
      {
          //Transform string into byte[]  
          byte[] byteArray = new byte[value.Length];
          int indexBA = 0;
          foreach (char item in value.ToCharArray())
          {
              byteArray[indexBA++] = (byte)item;
          }
  
          //Prepare for compress
          System.IO.MemoryStream ms = new System.IO.MemoryStream();
          System.IO.Compression.GZipStream sw = new System.IO.Compression.GZipStream(ms, System.IO.Compression.CompressionMode.Compress);
  
          //Compress
          sw.Write(byteArray, 0, byteArray.Length);
          //Close, DO NOT FLUSH cause bytes will go missing...
          sw.Close();
  
          //Transform byte[] zip data to string
          byteArray = ms.ToArray();
          System.Text.StringBuilder sB = new System.Text.StringBuilder(byteArray.Length);
          foreach (byte item in byteArray)
          {
              sB.Append((char)item);
          }
          ms.Close();
          sw.Dispose();
          ms.Dispose();
          return sB.ToString();
      }
  
      public static string UnZip(string value)
      {
          //Transform string into byte[]
          byte[] byteArray = new byte[value.Length];
          int indexBA = 0;
          foreach (char item in value.ToCharArray())
          {
              byteArray[indexBA++] = (byte)item;
          }
  
          //Prepare for decompress
          System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArray);
          System.IO.Compression.GZipStream sr = new System.IO.Compression.GZipStream(ms,
              System.IO.Compression.CompressionMode.Decompress);
  
          //Reset variable to collect uncompressed result
          byteArray = new byte[byteArray.Length];
  
          //Decompress
          int rByte = sr.Read(byteArray, 0, byteArray.Length);
  
          //Transform byte[] unzip data to string
          System.Text.StringBuilder sB = new System.Text.StringBuilder(rByte);
          //Read the number of bytes GZipStream red and do not a for each bytes in
          //resultByteArray;
          for (int i = 0; i &lt; rByte; i++)
          {
              sB.Append((char)byteArray[i]);
          }
          sr.Close();
          ms.Close();
          sr.Dispose();
          ms.Dispose();
          return sB.ToString();
      }
  
      static void Main(string[] args)
      {
          XDocument doc = XDocument.Load(@"D:\RSP.xml");
          string val = doc.ToString(SaveOptions.DisableFormatting);
          val = Zip(val);
          val = UnZip(val);
      }
  } 
  </code></pre>
  
  <p>My XML size is 63KB.</p>