using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.IO.Compression;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace BatchService.Framework.Utility
{
public class ZIPHelper
{
///
/// 将一个object对象序列化,返回一个byte[]
///
/// 能序列化的对象
///
public static byte[] ObjectToBytes(object obj)
{
using (MemoryStream ms = new MemoryStream())
{
IFormatter formatter = new BinaryFormatter(); formatter.Serialize(ms, obj); return ms.GetBuffer();
}
}
private static byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(0, SeekOrigin.Begin);
return bytes;
}
///
/// 将一个序列化后的byte[]数组还原
///
///
///
public static object BytesToObject(byte[] Bytes)
{
using (MemoryStream ms = new MemoryStream(Bytes))
{
IFormatter formatter = new BinaryFormatter(); return formatter.Deserialize(ms);
}
}
public static byte[] Compress(byte[] inBytes)
{
byte[] bb;
using (MemoryStream mStream = new MemoryStream(inBytes))
{
using (MemoryStream outStream = new System.IO.MemoryStream())
{
using (var tinyStream = new GZipStream(outStream, CompressionMode.Compress))
{
mStream.CopyTo(tinyStream);
}
bb = outStream.ToArray();
}
}
return bb;
}
public static byte[] Decompress(byte[] bytes)
{
try
{
byte[] output = new byte[1024 * 1024 * 10];
using (var inStream = new MemoryStream(bytes))
using (var bigStream = new GZipStream(inStream, CompressionMode.Decompress))
using (var bigStreamOut = new MemoryStream())
{
bigStream.CopyTo(bigStreamOut);
output = bigStreamOut.ToArray();
var output2 = Encoding.UTF8.GetString(bigStreamOut.ToArray());
}
return output;
}
catch (Exception e)
{
LogHelper.Error(e.Message);
return null;
}
}
}
}