代码
/// <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;
}

 

posted on 2010-06-09 17:03  ssyang  阅读(380)  评论(0编辑  收藏  举报