title: Why the result of GZip algorithm is not same in Android and .Net?
body: <p>Why the result of GZip algorithm is not same in Android and .Net?</p>
  
  <p>My code in android:</p>
  
  <pre><code>    public static String compressString(String str) {
  
      String str1 = null;
      ByteArrayOutputStream bos = null;
      try {
          bos = new ByteArrayOutputStream();
          BufferedOutputStream dest = null;
  
          byte b[] = str.getBytes();
          GZIPOutputStream gz = new GZIPOutputStream(bos, b.length);
          gz.write(b, 0, b.length);
          bos.close();
          gz.close();
  
      } catch (Exception e) {
          System.out.println(e);
          e.printStackTrace();
      }
      byte b1[] = bos.toByteArray();
      return Base64.encode(b1);
  }
  </code></pre>
  
  <p>My code in the .Net WebService:</p>
  
  <pre><code>    public static string compressString(string text)
  {
      byte[] buffer = Encoding.UTF8.GetBytes(text);
      MemoryStream ms = new MemoryStream();
      using (GZipStream zip = new GZipStream(ms, CompressionMode.Compress, true))
      {
          zip.Write(buffer, 0, buffer.Length);
      }
  
      ms.Position = 0;
      MemoryStream outStream = new MemoryStream();
  
      byte[] compressed = new byte[ms.Length];
      ms.Read(compressed, 0, compressed.Length);
  
      byte[] gzBuffer = new byte[compressed.Length + 4];
      System.Buffer.BlockCopy(compressed, 0, gzBuffer, 4, compressed.Length);
      System.Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gzBuffer, 0, 4);
      return Convert.ToBase64String(gzBuffer);
  }
  </code></pre>
  
  <p>In android:</p>
  
  <pre><code>compressString("hello"); -&gt; "H4sIAAAAAAAAAMtIzcnJBwCGphA2BQAAAA=="
  </code></pre>
  
  <p>In .Net:</p>
  
  <pre><code>compressString("hello"); -&gt; "BQAAAB+LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee++997o7nU4n99//P1xmZAFs9s5K2smeIYCqyB8/fnwfPyLmeVlW/w+GphA2BQAAAA=="
  </code></pre>
  
  <p>It is interesting that when I use <strong>Decompress</strong> method in android to decompress the result of .Net <strong>compressString</strong> method, it returns the original string correctly but I get error when I decompress the result of android <strong>compressedString</strong> method.</p>
  
  <p>Android Decompress method:</p>
  
  <pre><code>    public static String Decompress(String zipText) throws IOException {
      int size = 0;
      byte[] gzipBuff = Base64.decode(zipText);
  
      ByteArrayInputStream memstream = new ByteArrayInputStream(gzipBuff, 4,
              gzipBuff.length - 4);
      GZIPInputStream gzin = new GZIPInputStream(memstream);
  
      final int buffSize = 8192;
      byte[] tempBuffer = new byte[buffSize];
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      while ((size = gzin.read(tempBuffer, 0, buffSize)) != -1) {
          baos.write(tempBuffer, 0, size);
      }
      byte[] buffer = baos.toByteArray();
      baos.close();
  
      return new String(buffer, "UTF-8");
  }
  </code></pre>
  
  <p>I think that there is an error in Android <strong>compressString</strong> method.
  Can anybody help me?</p>