using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using System.Data;
using System.Runtime.Serialization;
using System.IO.Compression;
namespace Core.Mes.Common
{
public class Utility
{
#region dataset to byte[]
///
/// 序列化数据集
///
///
///
public static byte[] SerializeDataSet(DataSet ds)
{
byte[] buffer = null;
ds.RemotingFormat = SerializationFormat.Binary;
MemoryStream ms = new MemoryStream();
IFormatter bf = new BinaryFormatter();
bf.Serialize(ms, ds);
buffer = ms.ToArray();
ms.Close();
ms.Dispose();
ms = null;
ds.Dispose();
ds = null;
return buffer;
}
///
/// 反序列化数据集
///
///
///
public static DataSet ReSerializable(byte[] buffer)
{
MemoryStream ms = new MemoryStream(buffer);
IFormatter bf = new BinaryFormatter();
object obj = bf.Deserialize(ms);
DataSet ds = (DataSet)obj;
ms.Close();
ms.Dispose();
return ds;
}
///
/// 序列化对象
///
///
///
public static byte[] SerializeObject(Object obj)
{
byte[] buffer = null;
MemoryStream ms = new MemoryStream();
IFormatter bf = new BinaryFormatter();
bf.Serialize(ms, obj);
buffer = ms.ToArray();
ms.Close();
ms.Dispose();
ms = null;
return buffer;
}
///
/// 反序列化对象
///
///
///
public static Object ReSerializeObject(byte[] buffer)
{
MemoryStream ms = new MemoryStream(buffer);
IFormatter bf = new BinaryFormatter();
object obj = bf.Deserialize(ms);
ms.Close();
ms.Dispose();
return obj;
}
///
/// 序列化对象
///
///
///
public static byte[] SerializeAndCompressObject(Object obj)
{
byte[] buffer = null;
MemoryStream ms = new MemoryStream();
IFormatter bf = new BinaryFormatter();
bf.Serialize(ms, obj);
buffer = ms.ToArray();
ms.Close();
ms.Dispose();
ms = null;
return CompressBytes(buffer);
}
///
/// 反序列化对象
///
///
///
public static Object ReSerializeCompressedObject(byte[] buffer)
{
MemoryStream ms = new MemoryStream(Decompress(buffer));
IFormatter bf = new BinaryFormatter();
object obj = bf.Deserialize(ms);
ms.Close();
ms.Dispose();
return obj;
}
#endregion
#region 压缩、解压缩
//压缩字节
public static byte[] CompressBytes(byte[] bytes)
{ /* 1.创建压缩的数据流
2.设定compressStream为存放被压缩的文件流,并设定为压缩模式
3.将需要压缩的字节写到被压缩的文件流
*/
using (MemoryStream compressStream = new MemoryStream())
{
using (GZipStream zipStream = new GZipStream(compressStream, CompressionMode.Compress))
zipStream.Write(bytes, 0, bytes.Length);
return compressStream.ToArray();
}
}
//解压缩字节
public static byte[] Decompress(byte[] bytes)
{
/* 1.创建被压缩的数据流
2.创建zipStream对象,并传入解压的内存流
3.创建目标流
4.zipStream拷贝到目标流
5.返回目标流输出字节
* */
byte[] buffer = new byte[4096];//定义数据缓冲
using (MemoryStream compressStream = new MemoryStream(bytes))
{
using (GZipStream zipStream = new GZipStream(compressStream, CompressionMode.Decompress))
{
using (MemoryStream resultStream = new MemoryStream())
{
int offset = 0;
while ((offset = zipStream.Read(buffer, 0, buffer.Length)) != 0)
{
resultStream.Write(buffer, 0, offset);
}
return resultStream.ToArray();
}
}
}
}
//////////////////////////////////////////////////////////////////////////
///读取Stream
//////////////////////////////////////////////////////////////////////////
public static int ReadAllBytesFromStream(Stream stream, byte[] buffer)
{
int offset = 0;
int totalCount = 0;
while (true)
{
int bytesRead = stream.Read(buffer, offset, 100);
if (bytesRead == 0)
{
break;
}
offset += bytesRead;
totalCount += bytesRead;
}
return totalCount;
}
#endregion
}
}