[Compression][Gzip] 压缩注意事项

摘要:[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