C#压缩的实现方法

 

ContractedBlock.gifExpandedBlockStart.gif代码
/// <summary>
/// table XML序列化并压缩
/// </summary>
/// <param name="table"></param>
/// <param name="encryptor"></param>
/// <returns></returns>
public static byte[] Compress(DataTable table, ICryptoTransform encryptor)
{
byte[][] zipData = new byte[2][];
using (MemoryStream ms = new MemoryStream())
{
//对字节流进行加密
using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
using (GZipStream zs = new GZipStream(cs, CompressionMode.Compress, true))
{
using (BufferedStream bs = new BufferedStream(zs))
{
table.WriteXmlSchema(bs);
bs.Close();
}
zs.Close();
}
cs.FlushFinalBlock();
cs.Close();
}
zipData[
0] = ms.ToArray();
ms.Close();
}
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
using (GZipStream zs = new GZipStream(cs, CompressionMode.Compress, true))
{
using (BufferedStream bs = new BufferedStream(zs))
{
table.WriteXml(bs);
bs.Close();
}
zs.Close();
}
cs.FlushFinalBlock();
cs.Close();
}
zipData[
1] = ms.ToArray();
ms.Close();
}
//释放table的资源
table.Clear();
table.Dispose();

byte[] outData;
using (MemoryStream ms2 = new MemoryStream())
{
IFormatter formatter
= new BinaryFormatter();
formatter.Serialize(ms2, zipData);
outData
= ms2.ToArray();
ms2.Close();
ms2.Position
= 0;
}
//释放zipData的资源
GC.SuppressFinalize(zipData);
return outData;
}

/// <summary>
/// table XML序列化并压缩 不加密
/// </summary>
/// <param name="table"></param>
/// <returns></returns>
public static byte[] Compress(DataTable table)
{
byte[][] zipData = new byte[2][];
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream zs = new GZipStream(ms, CompressionMode.Compress, true))
{
using (BufferedStream bs = new BufferedStream(zs))
{
table.WriteXmlSchema(bs);
bs.Close();
}
zs.Close();
}
zipData[
0] = ms.ToArray();
ms.Close();
}
using (MemoryStream ms = new MemoryStream())
{
using (GZipStream zs = new GZipStream(ms, CompressionMode.Compress, true))
{
using (BufferedStream bs = new BufferedStream(zs))
{
table.WriteXml(bs);
bs.Close();
}
zs.Close();
}
zipData[
1] = ms.ToArray();
ms.Close();
}
//释放table的资源
table.Clear();
table.Dispose();

byte[] resutData;
using (MemoryStream ms = new MemoryStream())
{
IFormatter formatter
= new BinaryFormatter();
formatter.Serialize(ms, zipData);
resutData
= ms.ToArray();
ms.Close();
ms.Position
= 0;
}
//释放zipData的资源
GC.SuppressFinalize(zipData);
return resutData;
}

 

转载于:https://www.cnblogs.com/ssyang/archive/2010/06/09/1754911.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值