/// <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
}

解压与压缩(把dataset转为string、、 )的更多相关文章

  1. asp.net实现文件解压和压缩

    C#解压RAR压缩文件(--转载--测试通过) using System; using System.Collections.Generic; using System.Text; using Sys ...

  2. C# 解压RAR压缩文件

    此方法适用于C盘windows文件夹中有WinRAR.exe文件 /// 解压文件(不带密码) RAR压缩程序 返回解压出来的文件数量 /// </summary> /// <par ...

  3. C# 解压与压缩文件

    解压文件 ,引用 SharpZipLib.dll类库 方法一: public void UnGzipFile(string zipfilename) { //同压缩文件同级同名的非压缩文件路径 var ...

  4. Java的压缩、解压及压缩加密、解密解压 样例

    为了节约带宽.加快传送速度,http协议支持gzip的压缩,但假设我们的app与后台不是通过http协议通讯的.那么压缩.解压这个流程须要自己写.以下给出compress和decompress的代码: ...

  5. Pako.js压缩解压,vue压缩解压,前后端之间高效数据传输

    项目开发中常常会遇到前后端之间有大量数据传输占用带宽导致页面响应慢的问题,这时候我们可以考虑使用Pako.js对信息进行压缩之后传输. 我在前端使用的是vue-element-admin前端框架.框架 ...

  6. linux中tar之解压和压缩常用

    我们知道在windows中解压和压缩有两个非常强大的工具winRar和国产的好压工具,在linux中也有一款强大的解压和压缩工具.那就是大名鼎鼎的tar.我们首先看看tar命令的使用格式 语法:tar ...

  7. Linux:文件解压与压缩

    文件打包与压缩 常见压缩文件格式: |文件后缀名 |说明| |.zip |zip程序打包压缩的文件| |.rar |rar程序压缩的文件| |.7z |7zip程序压缩的文件| |.tar |tar程 ...

  8. [转]Ubuntu Linux 安装 .7z 解压和压缩文件

    [转]Ubuntu Linux 安装 .7z 解压和压缩文件 http://blog.csdn.net/zqlovlg/article/details/8033456 安装方法: sudo apt-g ...

  9. [转]Ubuntu 常用解压与压缩命令

    .tar 文件(注:tar是打包,不是压缩!) # 仅打包,并非压缩 tar -xvf FileName.tar # 解包 tar -cvf FileName.tar DirName # 将DirNa ...

  10. os与操作系统进行交互,sys解释器相关,random随机数,shutil解压和压缩

    1.os 与操作系统相关 对文件的处理 对路径的处理 import os#主要用于与操作系统进行交互 掌握: print(os.makedirs('a/b/c'))#创建目录 可用递归创建 print ...

随机推荐

  1. UNIX 网络编程学习

    a.述 书买很久了,好好学习下.O(∩_∩)O  只写程序,原理什么的,先不写了. b.环境 deepin15.4.1 64位 vs code gcc version 6.4.0 20170724 ( ...

  2. android 记录所有打开的Activity,退出程序

    android 记录所有打开的Activity,退出程序   package com.main.server; import java.util.LinkedList; import java.uti ...

  3. java基础之JDBC三:简单工具类的提取及应用

    简单工具类: public class JDBCSimpleUtils { /** * 私有构造方法 */ private JDBCSimpleUtils() { } /** * 驱动 */ publ ...

  4. 基于size的优化

    ----------------------siwuxie095                                 基于 size 的优化         在 union( p , q ...

  5. WEB前端--CSS

    一.认识CSS 1.概念 CSS(Cascading Style Sheet,层叠样式表),可以将网页制作的更加绚丽多彩.它可以有效的对页面的布局.字体.颜色.背景和其它效果实现更加精确的控制. 2. ...

  6. bootstrap图片切换效果

    <!DOCTYPE html><html lang="zh-cn"><head><meta charset="utf-8&quo ...

  7. Linux 下安装tomcat 服务器

    1. 下载tomcat wget http://apache.fayea.com/tomcat/tomcat-7/v7.0.68/bin/apache-tomcat-7.0.68.tar.gz tar ...

  8. Linux下ffmpeg安装与开发配置

    Linux下ffmpeg安装与开发配置   1. ffmpeg安装 安装环境: ubuntu 12.04 (1)删除已安装的文件,避免冲突 sudo apt-get remove ffmpeg x26 ...

  9. poj1840 Eqs(hash+折半枚举)

    Description Consider equations having the following form: a1x13+ a2x23+ a3x33+ a4x43+ a5x53=0 The co ...

  10. Nginx禁止直接通过IP地址访问网站

    介绍下在nginx服务器禁止直接通过IP地址访问网站的方法,以避免别人恶意指向自己的IP,有需要的朋友参考下. 有时会遇到很多的恶意IP攻击,在Nginx下可以禁止IP访问. Nginx的默认虚拟主机 ...