/// <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. 深入剖析SolrCloud(一)

    作者:洞庭散人 出处:http://phinecos.cnblogs.com/ 本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由 ...

  2. 张超超OC基础回顾03_结构体类型作为成员变量的特殊用法

    直接上例子: 要求: 合理的设计一个”学生“类 学生有* 姓名* 生日两个属性和说出自己姓名生日方法  要求利用设计的学生类创建学生对象,并说出自己的姓名和年龄 描述学生类 事物名称: 学生(Stud ...

  3. 第十课,ROS仿真2

    Rviz 属性 1.下面以turtlebot_stage inRviz为例 首先安装 sudo apt-get install ros-indigo-turtlebot-simulator 运行 ro ...

  4. ios7适配--uitableviewcell选中效果

    ios7 UITableViewCell selectionStyle won't go back to blue up vote6down votefavorite 2 Xcode 5.0, iOS ...

  5. iOS编程——Objective-C KVO/KVC机制[转]

    这两天在看和这个相关的的内容,全部推翻重写一个版本,这是公司内做技术分享的文档总结,对结构.条理做了更清晰的调整.先找了段代码,理解下,网上看到最多的一段的关于KVC的代码 先上代码 1.     1 ...

  6. ParameterizedType的作用

    public interface ParameterizedType  extends Type subParam.Java package com.example.test; public clas ...

  7. 桥梁(Bridge)模式

    桥梁(Bridge)模式:桥梁模式是一个非常有用的模式,也是比较复杂的一个模式.熟悉这个模式对于理解面向对象的设计原则,包括"开-闭"原则(OCP)以及组合/聚合复用原则(CARP ...

  8. 关于 ASP.NET 的 CompilationMode="Never" 性能问题

    今天在优化系统性的时候,想到了 ASP.NET 里的 CompilationMode="Never", 因为用户控件里没有任何代码, 只有控件,把用户控件的编译模式改为 Never ...

  9. 精心收集的 48 个 JavaScript 代码片段,仅需 30 秒就可理解!(转载)

    Anagrams of string(带有重复项) 使用递归.对于给定字符串中的每个字母,为字母创建字谜.使用map()将字母与每部分字谜组合,然后使用reduce()将所有字谜组合到一个数组中,最基 ...

  10. 学习使用MS SQL Server游标(CURSOR)

    说实的,使用MS SQL Server这样久,游标一直没有使用过.以前实现相似的功能,都是使用WHILE循环加临时表来实现.刚才有参考网上示例练习写了一下.了解到游标概念与语法. 下面代码示例中,先是 ...