天天看点

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

添加引用 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 "";

}