反序列化及解压缩

public static DataSet DataSetDeserializeDecompre(byte[] b)
       {
           FileStream fss = File.Create("datasetCompression.dat");//创建文件
           fss.Close();
           File.WriteAllBytes("datasetCompression.dat", b);

           FileStream fs = File.OpenRead("datasetCompression.dat");//打开文件  

           fs.Position = 0;//设置文件流的位置  

           GZipStream gzipStream = new GZipStream(fs, CompressionMode.Decompress);//创建解压对象  

           byte[] buffer = new byte[4096];//定义数据缓冲  

           int offset = 0;//定义读取位置  

           MemoryStream ms = new MemoryStream();//定义内存流  

           while ((offset = gzipStream.Read(buffer, 0, buffer.Length)) != 0)
           {
               ms.Write(buffer, 0, offset);//解压后的数据写入内存流  
           }

           BinaryFormatter sfFormatter = new BinaryFormatter();//定义BinaryFormatter以反序列化DataSet对象  

           ms.Position = 0;//设置内存流的位置  

           DataSet ds;

           try
           {
               ds = (DataSet)sfFormatter.Deserialize(ms);//反序列化 
           }
           catch
           {
               throw;
           }
           finally
           {
               ms.Close();//关闭内存流  
               ms.Dispose();//释放资源
               fs.Close();//关闭文件流  
               fs.Dispose();//释放资源  
               gzipStream.Close();//关闭解压缩流  
               gzipStream.Dispose();// 
           }
           //释放资源  
           return ds;
       }

       #region 反序列化未压缩的DataSet
       //public static DataSet DataSetDeserializeDecompre(byte[] b)
       //{
       //    //FileStream fs = File.OpenRead(_filePath);//打开文件  
       //    MemoryStream ms = new MemoryStream(b,true);//创建内存流对象
       //    //fs.Position = 0;//设置文件流的位置 
       //    ms.Position = 0;

       //    BinaryFormatter sfFormatter = new BinaryFormatter();//定义BinaryFormatter以反序列化DataSet对象  

       //    DataSet ds;

       //    try
       //    {
       //        ds = (DataSet)sfFormatter.Deserialize(ms);//反序列化  
       //    }
       //    catch
       //    {
       //        throw;
       //    }
       //    finally
       //    {
       //        ms.Close();//关闭内存流  
       //        ms.Dispose();//释放资源  
       //    }
       //    ms.Close();//关闭文件流  
       //    ms.Dispose();//释放资源  
       //    return ds;
       //}
       #endregion

posted @ 2009-06-04 10:46  根本风流  阅读(330)  评论(0编辑  收藏  举报