您的位置:首页 > 编程语言 > C#

C#压缩的实现方法

2010-06-09 17:03 363 查看
代码

/// <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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: