/// <summary>
/// 压缩 解压
/// </summary>
public class ZipHelper
{
#region 压缩解缩
/// <summary>
/// 压缩指定字符串
/// </summary>
/// <param name="strSource"></param>
/// <returns></returns>
public static string Compress(string strSource)
{
//System.Text.Encoding encoding = System.Text.Encoding.Unicode;
byte[] buffer = Encoding.Default.GetBytes(strSource);// encoding.GetBytes(strSource);
return Convert.ToBase64String(Compress(buffer)); //将压缩后的byte[]转换为Base64String
}
/// <summary>
/// 解压缩指定字符串
/// </summary>
/// <param name="strSource"></param>
/// <returns></returns>
public static string Decompress(string strSource)
{
byte[] buffer = Convert.FromBase64String(strSource);
return Encoding.Default.GetString(Decompress(buffer));// System.Text.Encoding.Unicode.GetString(Decompress(buffer)); //转换为普通的字符串
}
/// <summary>
/// 压缩DataTable
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static string CompressDataTable(DataTable source)
{
System.Text.Encoding encoding = System.Text.Encoding.Unicode;
return Convert.ToBase64String(GetDataTableZipBytes(source));
}
/// <summary>
/// 解压DataTable
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static DataTable DecompressDataTable(string source)
{
byte[] buffer = Convert.FromBase64String(source);
return GetZipBytesDataTable(buffer);
}
/// <summary>
/// 压缩DataSet
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static string CompressDataSet(DataSet source)
{
if (source == null)
return "";
System.Text.Encoding encoding = System.Text.Encoding.Unicode;
return Convert.ToBase64String(GetDataSetZipBytes(source));
}
/// <summary>
/// 解压DataSet
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static DataSet DecompressDataSet(string source)
{
if (string.IsNullOrEmpty(source))
return null;
byte[] buffer = Convert.FromBase64String(source);
return GetZipBytesDataSet(buffer);
}
#endregion

#region 私有方法

#region 压缩基础流
/// <summary>
/// 压缩基础流
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static byte[] Compress(byte[] data)
{
try
{
MemoryStream ms = new MemoryStream();
Stream zipStream = null;
zipStream = new GZipStream(ms, CompressionMode.Compress, true);
zipStream.Write(data, 0, data.Length);
zipStream.Close();
ms.Position = 0;
byte[] compressed_data = new byte[ms.Length];
ms.Read(compressed_data, 0, int.Parse(ms.Length.ToString()));
return compressed_data;
}
catch
{
return null;
}
}
#endregion

#region 解压缩基础流
/// <summary>
/// 解压缩基础流
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static byte[] Decompress(byte[] data)
{
try
{
MemoryStream ms = new MemoryStream(data);
Stream zipStream = null;
zipStream = new GZipStream(ms, CompressionMode.Decompress);
byte[] dc_data = null;
dc_data = EtractBytesFormStream(zipStream, data.Length);
return dc_data;
}
catch
{
return null;
}
}
private static byte[] EtractBytesFormStream(Stream zipStream, int dataBlock)
{
try
{
byte[] data = null;
int totalBytesRead = 0;
while (true)
{
Array.Resize(ref data, totalBytesRead + dataBlock + 1);
int bytesRead = zipStream.Read(data, totalBytesRead, dataBlock);
if (bytesRead == 0)
{
break;
}
totalBytesRead += bytesRead;
}
Array.Resize(ref data, totalBytesRead);
return data;
}
catch
{
return null;
}
}
#endregion

/// <summary>
/// 将DataSet转换为压缩的字节数组
/// </summary>
/// <returns></returns>
private static byte[] GetDataSetZipBytes(DataSet ds)
{
BinaryFormatter ser = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
ser.Serialize(ms, ds);
byte[] buffer = ms.ToArray();
byte[] zipBuffer = Compress(buffer);
return zipBuffer;
}
private static byte[] GetDataTableZipBytes(DataTable dt)
{
BinaryFormatter ser = new BinaryFormatter();
MemoryStream ms = new MemoryStream();
ser.Serialize(ms, dt);
byte[] buffer = ms.ToArray();
byte[] zipBuffer = Compress(buffer);
return zipBuffer;
}

/// <summary>
/// 将压缩的字节数组转换为DataSet
/// </summary>
/// <returns></returns>
private static DataSet GetZipBytesDataSet(byte[] zipBuffer)
{
byte[] buffer = Decompress(zipBuffer);
BinaryFormatter ser = new BinaryFormatter();
DataSet ds = ser.Deserialize(new MemoryStream(buffer)) as DataSet;
return ds;
}

/// <summary>
/// 将压缩的字节数组转换为DataTable
/// </summary>
/// <returns></returns>
private static DataTable GetZipBytesDataTable(byte[] zipBuffer)
{
byte[] buffer = Decompress(zipBuffer);
BinaryFormatter ser = new BinaryFormatter();
DataTable dt = ser.Deserialize(new MemoryStream(buffer)) as DataTable;
return dt;
}
#endregion
}

最新文章

  1. 在canvas中使用html元素
  2. String
  3. umask
  4. Struts2中重定向和请求转发配置
  5. ssh-keygen -t rsa -f cloud.key ssh -i cloud.key &lt;username&gt;@&lt;instance_ip&gt;
  6. 未在本地计算机上注册“Microsoft.Jet.OLEDB.4.0” 提供程序解决办法
  7. Jquery-zTree的基本用法
  8. 《深入Java虚拟机学习笔记》- 第19章 方法的调用与返回
  9. poj1637--Sightseeing tour(最大流)
  10. MYSQL 5.7 MTS 复制
  11. MSSQL2005 导出excel文件
  12. struts2标签库使用小结
  13. 使用Gradle创建java web项目
  14. Git 忽略提交 .gitignore
  15. ConcurrentHashMap、CopyOnWriteArrayList、LinkedHashMap
  16. Eureka源码探索(一)-客户端服务端的启动和负载均衡
  17. Uncaught SyntaxError: Unexpected token export
  18. 常见的Java面试题及答案整理
  19. 七、K3 WISE 开发插件《Update字段级更新触发器 - BOS单审核后反写源单》
  20. 【CF772D】Varying Kibibits FWT

热门文章

  1. JAVA基础知识总结15(集合容器)
  2. OpenGL顶点缓冲区对象
  3. Hadoop之HDFS(二)HDFS基本原理
  4. java Web jsp页面的静态包含和动态包含
  5. PHP网站
  6. Adam:一种随机优化方法
  7. 张超超OC基础回顾03_结构体类型作为成员变量的特殊用法
  8. Angular27 指令
  9. 4-拷贝我的eclipse写安卓的配置说明
  10. Python 安装urllib3