天天看點

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 "";

}