![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.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;
}