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

C# DataSet String Byte[] 压缩 解压缩 代码 实例

2010-05-18 10:40 453 查看
添加引用 using System.IO.Compression;

代码如下:

/// <summary>
/// 获取数据压缩后的字节码
/// </summary>
public byte[] Compress(DataSet dt)
{
try
{
// 声明MemoryStream
MemoryStream ms = new MemoryStream();
// 写入DataSet中的数据到ms中
dt.WriteXml(ms, XmlWriteMode.WriteSchema);
// ms转换为数组序列
byte[] bsrc = ms.ToArray();
//关闭ms并释放资源
ms.Close();
ms.Dispose();

ms = new MemoryStream();
ms.Position = 0;
// 压缩数组序列中的数据
DeflateStream zipStream = new DeflateStream(ms, CompressionMode.Compress);
zipStream.Write(bsrc, 0, bsrc.Length);
zipStream.Close();
zipStream.Dispose();
return ms.ToArray();
}
catch
{
return null;
}
}
/// <summary>
/// 获取对象压缩后的字节码
/// </summary>
public byte[] Compress(string str)
{
try
{
// ms读取传入的str并转存如数组序列中
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
sw.Write(str);
sw.Close();
byte[] bsrc = ms.ToArray();
ms.Close();
ms.Dispose();
ms = new MemoryStream();
ms.Position = 0;
// 压缩数组序列并返回压缩后的数组
DeflateStream zipStream = new DeflateStream(ms, CompressionMode.Compress);
zipStream.Write(bsrc, 0, bsrc.Length);
zipStream.Close();
zipStream.Dispose();
return ms.ToArray();
}
catch
{
return null;
}
}
/// <summary>
/// 获取解压缩后的数据集
/// </summary>
public DataSet DeCompress(byte[] arrbts)
{
try
{
//
MemoryStream ms = new MemoryStream();
ms.Write(arrbts, 0, ArrBytes.Length);
ms.Position = 0;
//
DeflateStream ZipStream = new DeflateStream(ms, CompressionMode.Decompress);
MemoryStream UnzipStream = new MemoryStream();
byte[] sDecompressed = new byte[128];
while (true)
{
int bytesRead = ZipStream.Read(sDecompressed, 0, 128);
if (bytesRead == 0)
{
break;
}
UnzipStream.Write(sDecompressed, 0, bytesRead);
}
ZipStream.Close();
ms.Close();
UnzipStream.Position = 0;
DataSet ds = new DataSet();
// 读取解压后xml数据
ds.ReadXml(UnzipStream);
ds.AcceptChanges();     //更新所有行的状态为初始状态
return ds;
}
catch
{ return null; }
}
/// <summary>
/// 获取解压缩后的字符串
/// </summary>
public string DeCompressString(byte[] arrbts)
{
try
{
MemoryStream ms = new MemoryStream();
ms.Write(arrbts, 0, ArrBytes.Length);
ms.Position = 0;
DeflateStream ZipStream = new DeflateStream(ms, CompressionMode.Decompress);
MemoryStream UnzipStream = new MemoryStream();
byte[] sDecompressed = new byte[128];
while (true)
{
int bytesRead = ZipStream.Read(sDecompressed, 0, 128);
if (bytesRead == 0)
{
break;
}
UnzipStream.Write(sDecompressed, 0, bytesRead);
}
ZipStream.Close();
ms.Close();
UnzipStream.Position = 0;// 解压起始位置设置为头
StreamReader sr = new StreamReader(UnzipStream);
return sr.ReadToEnd();
}
catch
{
return "";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: