序列化及压缩

public static byte[] DataSetSerializerCompression(DataSet ds) //这里我是将一个DataSet序列化及压缩,最后以byte形式返回
        {
            IFormatter formatter = new BinaryFormatter();//定义BinaryFormatter以序列化DataSet对象

            MemoryStream ms = new MemoryStream();//创建内存流对象

            formatter.Serialize(ms, ds);//把DataSet对象序列化到内存流

            byte[] buffer = ms.ToArray();//把内存流对象写入字节数组

            ms.Close();//关闭内存流对象

            ms.Dispose();//释放资源

            FileStream fs = File.Create("datasetCompression.dat");//创建文件

            GZipStream gzipStream = new GZipStream(fs, CompressionMode.Compress, true);//创建压缩对象

            gzipStream.Write(buffer, 0, buffer.Length);//把压缩后的数据写入文件

            gzipStream.Close();//关闭压缩流,这里要注意:一定要关闭,要不然解压缩的时候会出现小于4K的文件读取不到数据,大于4K的文件读取不完整

            gzipStream.Dispose();//释放对象

            fs.Close();//关闭流

            fs.Dispose();//释放对象

            buffer = File.ReadAllBytes(Application.StartupPath+"\\datasetCompression.dat");//读取应用软件所在目录下的文件
            return buffer;

        }

        //// 不压缩直接序列化DataSet
        //static void DataSetSerializer(DataSet ds)
        //{
        //    IFormatter formatter = new BinaryFormatter();//定义BinaryFormatter以序列化DataSet对象

        //    FileStream fs = File.Create("dataset.dat");//创建文件

        //    formatter.Serialize(fs, ds);//把DataSet对象序列化到文件

        //    fs.Close();//关闭流

        //    fs.Dispose();//释放对象
        //}

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