網上找了一個關于序列化和壓縮相關的方法,記錄下來,以便日后用!
#region 可序列化對象到byte數組的相互轉換/// <summary>/// 將可序列化對象轉成Byte數組/// </summary>/// <param name="o">對象</param>/// <returns>返回相關數組</returns>public static byte[] ObjectToByteArray(object o){MemoryStream ms = new MemoryStream();BinaryFormatter bf = new BinaryFormatter();bf.Serialize(ms, o);ms.Close();return ms.ToArray();}/// <summary>/// 將可序列化對象轉成的byte數組還原為對象/// </summary>/// <param name="b">byte數組</param>/// <returns>相關對象</returns>public static object ByteArrayToObject(byte[] b){MemoryStream ms = new MemoryStream(b, 0, b.Length);BinaryFormatter bf = new BinaryFormatter();return bf.Deserialize(ms);}#endregion#region 采用.net系統自帶Gzip壓縮類進行流壓縮/// <summary>/// 壓縮數據/// </summary>/// <param name="data"></param>/// <returns></returns>public static byte[] Compress(byte[] data){byte[] bData;MemoryStream ms = new MemoryStream();GZipStream stream = new GZipStream(ms, CompressionMode.Compress, true);stream.Write(data, 0, data.Length);stream.Close();stream.Dispose();//必須把stream流關閉才能返回ms流數據,不然數據會不完整//并且解壓縮方法stream.Read(buffer, 0, buffer.Length)時會返回0bData = ms.ToArray();ms.Close();ms.Dispose();return bData;}/// <summary>/// 解壓數據/// </summary>/// <param name="data"></param>/// <returns></returns>public static byte[] Decompress(byte[] data){byte[] bData;MemoryStream ms = new MemoryStream();ms.Write(data, 0, data.Length);ms.Position = 0;GZipStream stream = new GZipStream(ms, CompressionMode.Decompress, true);byte[] buffer = new byte[1024];MemoryStream temp = new MemoryStream();int read = stream.Read(buffer, 0, buffer.Length);while (read > 0){temp.Write(buffer, 0, read);read = stream.Read(buffer, 0, buffer.Length);}//必須把stream流關閉才能返回ms流數據,不然數據會不完整stream.Close();stream.Dispose();ms.Close();ms.Dispose();bData = temp.ToArray();temp.Close();temp.Dispose();return bData;}#endregion