System.IO.Compression下的2个类搞了好久,原因看注释

 

System.IO.Compression下的2个类搞了好久,原因看注视

         public   static   byte [] Compression( byte [] data, CompressionMode mode)
        
{
            DeflateStream zip 
= null;
            
try
            
{
                
if (mode == CompressionMode.Compress)
                
{
                    MemoryStream ms 
= new MemoryStream();
                    zip 
= new DeflateStream(ms, mode, true);
                    zip.Write(data, 
0, data.Length);
                    zip.Close();               
//在返回处理结果前一定要把流关闭,否则取得的数据不完整
                    return ms.ToArray(); //我比较习惯于在finally中关闭,这个问题弄了好久。用using的话要把return放在using范围外
                }

                
else
                
{
                    MemoryStream ms 
= new MemoryStream();
                    ms.Write(data, 
0, data.Length);
                    ms.Flush();
                    ms.Position 
= 0;
                    zip 
= new DeflateStream(ms, mode, true);
                    MemoryStream os 
= new MemoryStream();
                    
int SIZE = 1024;
                    
byte[] buf = new byte[SIZE];
                    
int l = 0;
                    
do
                    
{
                        l 
= zip.Read(buf, 0, SIZE);  //第一次读入时居然返回0字节
                        if (l == 0) l = zip.Read(buf, 0, SIZE);//只好加了这行代码
                        os.Write(buf, 
0, l);
                    }
while(l != 0);
                    zip.Close();              
//在返回处理结果前一定要把流关闭,否则取得的数据不完整
                    return os.ToArray(); //我比较习惯于在finally中关闭,这个问题弄了好久。用using的话要把return放在using范围外
                }
            }

            
catch
            
{
                
return null;
            }

            
finally
            
{
                
if (zip != null) zip.Close();
            }

        }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值