/// <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. 【bzoj2947】[Poi2000]促销

    2947: [Poi2000]促销 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 181  Solved: 120[Submit][Status][D ...

  2. 张超超OC基础回顾_05 property修饰符,id类型,instancetype。。。

    一.property 如果给一个属性同时提供了getter/setter方法, 那么我们称这个属性为可读可写属性 如果只提供了getter方法, 那么我们称这个属性为只读属性 如果只提供了setter ...

  3. spring 框架jdbc连接数据库

    user=LF password=LF url=jdbc:oracle:thin:@localhost:1521:orcl driver=oracle.jdbc.driver.OracleDriver ...

  4. 2-python代码坑点

    #切片: # L = ['aaa', 'bbb', 'ccc', 'ddd'] # print(L[1 : 3]) #取[1, 3):下标 # L = list(range(100)) # print ...

  5. Apache ab命令

    一.简介 ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比如nginx.tomcat.IIS等. 二. ...

  6. 利用HttpWebRequest类Post数据至URI

    在与第三方系统进行数据对接时,需要把数据post到对方提供的一个url,然后进行相关处理. 这里可利用HttpWebRequest类,该类位于System.Net命名空间下.它提供了一些属性和方法可以 ...

  7. matplotlib的颜色和控制条

    为了方便记忆,收藏备用 一 linestyle '-' solid line style '--' dashed line style '-.' dash-dot line style ':' dot ...

  8. 使用Cytoscape画PPI网络图

    打开Cytoscape软件,根据菜单导入string_interactions.tsv文件 File ----> Import ----> Network from File 会弹出下图对 ...

  9. Tomcat 与 数据库连接池 的小坑

    连接池的优点众所周知. 我们可以自己实现数据库连接池,也可引入实现数据库连接池的jar包,按要求进行配置后直接使用. 关于这方面的资料,好多dalao博客上记录的都是旧版本Tomcat的配置方式,很可 ...

  10. Servlet中response对象Commit状态的分析

    response是服务端对客户端请求的一个响应,其中封装了响应头.状态码.内容(也就是最终要在浏览器上显示的HTML代码或者其他数据格式)等. 服务端在把response提交到客户端之前,会使用一个缓 ...