DataSet 读取/压缩 /解压

 

            // 从数据库读取dataset ,压缩写入 wenjian
            MssqlHelper db = new MssqlHelper(GlobalSetting.ConnectString);
            DataSet ds = db.ExecuteDataSet("select * from dim_goods");
            byte[] bytesData = GetBytesFromDataSet(ds);
            byte[] byteCompress = CompressBytes(bytesData);
            WriteByteToFile(@"d:\temp\dim_goods9.zip", byteCompress);

 

            //读取压缩文件, 还原为dataset 
            byte[] bytesData = ReadFromFile(@"d:\temp\dim_goods9.zip");
            byte[] byteCompress = Decompress(bytesData);
            DataSet ds = ByteArrayToDataSet(byteCompress);

 

 

 

        public static byte[] GetBytesFromDataSet(DataSet ds)
        {
            byte[] data = null;
            using (MemoryStream stream = new MemoryStream())
            {
                IFormatter bf = new BinaryFormatter();
                ds.RemotingFormat = SerializationFormat.Binary;
                bf.Serialize(stream, ds);
                data = stream.ToArray();
            }
            return data;
        }
        public static DataSet ByteArrayToDataSet(byte[] arrBytes)
        {
            MemoryStream memStream = new MemoryStream();
            BinaryFormatter binForm = new BinaryFormatter();
            memStream.Write(arrBytes, 0, arrBytes.Length);
            memStream.Seek(0, SeekOrigin.Begin);
            DataSet ds = (DataSet)binForm.Deserialize(memStream);

            return ds;
        }
        //压缩字节
        //1.创建压缩的数据流 
        //2.设定compressStream为存放被压缩的文件流,并设定为压缩模式
        //3.将需要压缩的字节写到被压缩的文件流
        public static byte[] CompressBytes(byte[] bytes)
        {
            using (MemoryStream compressStream = new MemoryStream())
            {
                using (var zipStream = new GZipStream(compressStream, CompressionMode.Compress))
                    zipStream.Write(bytes, 0, bytes.Length);
                return compressStream.ToArray();
            }
        }
        //解压缩字节
        //1.创建被压缩的数据流
        //2.创建zipStream对象,并传入解压的文件流
        //3.创建目标流
        //4.zipStream拷贝到目标流
        //5.返回目标流输出字节
        public static byte[] Decompress(byte[] bytes)
        {
            using (var compressStream = new MemoryStream(bytes))
            {
                using (var zipStream = new GZipStream(compressStream,CompressionMode.Decompress))
                {
                    using (var resultStream = new MemoryStream())
                    {
                        zipStream.CopyTo(resultStream);
                        return resultStream.ToArray();
                    }
                }
            }
        }

        public static byte[] ReadFromFile(string file)
        {
            FileStream fs = new FileStream(file, FileMode.Open, System.IO.FileAccess.Read);
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, (int)fs.Length);
            return bytes;
        }

        public static void WriteByteToFile(string file , byte[] bytes)
        {
            FileStream fs = new FileStream(file, FileMode.Create, System.IO.FileAccess.Write);
            
            fs.Write(bytes, 0, bytes.Length);
            fs.Close();
        }

 

posted on 2024-01-22 15:56  EasyBI  阅读(12)  评论(0编辑  收藏  举报

导航