[Compression][Gzip] 壓縮注意事項

  • 1370
  • 0

摘要:[Compression][Gzip] 壓縮注意事項

在網路上看了些論壇發問的例子後,發現有不少的例子在壓縮時是錯誤的,先看一下下面的例子是否正確:


        public static byte[] Compress(byte[] originalData)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                using (GZipStream compress = new GZipStream(ms, CompressionMode.Compress))
                {
                    compress.Write(originalData, 0, originalData.Length);
                    return ms.ToArray();                    
                }
            }
        }

 

看起來好像正確,其實有個問題存在,

其實是看了MSDN提供的例子後,我也才發覺這個錯誤,

MSDN例子中沒有使用using關鍵字來釋放資源,而是使用Close方法來釋放資源,

而上面錯誤的地方就是在compress物件尚未釋放資源前,就將ms串流轉換成位元祖

 


        public static byte[] Compress(byte[] originalData)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                using (GZipStream compress = new GZipStream(ms, CompressionMode.Compress))
                {
                    compress.Write(originalData, 0, originalData.Length);
                    
                }
                return ms.ToArray();
            }
        }

 

by jgame2012