C# 中对DataSet进行压缩

下面的方法中用到了DataSetSurrogate (附录中带了源码)

1、调用 DataSetSurrogate对数据集进行序列化操作,生成二进制数组

 public byte[] getSerializeDataSet(DataSet dt)

        {

            DataSetSurrogate dss = new DataSetSurrogate(dt);

            BinaryFormatter ser = new BinaryFormatter();

            MemoryStream ms = new MemoryStream();

            ser.Serialize(ms, dss);

            byte[] buffer = ms.ToArray();

            return buffer;

        }

2 对二进制数组进行压缩,得到压缩后的二进制数组

       public byte[] Compress(byte[] data)//压缩

        {

            MemoryStream ms = new MemoryStream();

            Stream zipStream = null;

            zipStream = new System.IO.Compression.GZipStream(ms, System.IO.Compression.CompressionMode.Compress, true);

            //System.IO.Compression.CompressionMode:指定是否压缩和解压缩基础流(Compress:压缩,DeCompress:解压缩)

            zipStream.Write(data, 0, data.Length);

            zipStream.Close();

            ms.Position = 0;//获取或设置流中当前位置

            byte[] compressed_data = new byte[ms.Length];

            ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));

            return compressed_data;

        }

3、压缩后的DATASET就生成了

4、下面为如何解压缩得到DATASET

        public byte[] Decompress(byte[] data)//解压缩

        {

            try

            {

                MemoryStream ms = new MemoryStream(data);

                Stream zipStream = null;

                zipStream = new System.IO.Compression.GZipStream(ms, System.IO.Compression.CompressionMode.Decompress);

                byte[] dc_data = null;

                dc_data = EtractBytesFormStream(zipStream, data.Length);

                return dc_data;

            }

            catch

            {

                return null;

            }

        }

        public byte[] EtractBytesFormStream(Stream zipStream, int dataBlock)

        {

            try

            {

                byte[] data = null;

                int totalBytesRead = 0;

                while (true)

                {

                    Array.Resize(ref data, totalBytesRead + dataBlock + 1);

                    int bytesRead = zipStream.Read(data, totalBytesRead, dataBlock);

                    if (bytesRead == 0)

                    {

                        break;

                    }

                    totalBytesRead += bytesRead;

                }

                Array.Resize(ref data, totalBytesRead);

                return data;

            }

            catch

            {

                return null;

            }

        }

5、通过DataSetSurrogate得到解压后的DATASET

        public DataSet ReSerializable(byte[] buffer)

        {

            BinaryFormatter ser = new BinaryFormatter();

            DataSetSurrogate dss = ser.Deserialize(new MemoryStream(buffer)) as DataSetSurrogate;

            DataSet dataSet = dss.ConvertToDataSet();

            return dataSet;

        }

DAtaSetSurrogate原码

转载于:https://www.cnblogs.com/dingshouqing/articles/1397935.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值