public  class YS
{
public static byte[] Decompress(byte[] data)
{
byte[] bData;
MemoryStream ms = new MemoryStream();
//把数据写入到内存流
ms.Write(data, 0, data.Length);
//确定写入的位置,因为不是一次性写入
ms.Position = 0;
//解压流
GZipStream stream = new GZipStream(ms, CompressionMode.Decompress, true);
//性能处理
byte[] buffer = new byte[4096];
//临时内存流
MemoryStream temp = new MemoryStream();
//读入指定的文件流,0表示有没有到文件末尾
int read = stream.Read(buffer, 0, buffer.Length);
while (read > 0)
{
//写入到临时缓冲区内
temp.Write(buffer, 0, read);
//
read = stream.Read(buffer, 0, buffer.Length);
}
//必须把stream流关闭才能返回ms流数据,不然数据会不完整
stream.Close();
stream.Dispose();
ms.Close();
ms.Dispose();
bData = temp.ToArray();
temp.Close();
temp.Dispose();
return bData;
}
/// <summary>
/// 压缩数据
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static byte[] Compress(byte[] data)
{
byte[] bData;
//创建内存流
MemoryStream ms = new MemoryStream();
//创建压缩解压对象
GZipStream stream = new GZipStream(ms, CompressionMode.Compress, true);
//把数据写入缓冲区
stream.Write(data, 0, data.Length);
stream.Close();
stream.Dispose();
//必须把stream流关闭才能返回ms流数据,不然数据会不完整
//并且解压缩方法stream.Read(buffer, 0, buffer.Length)时会返回0
bData = ms.ToArray();
ms.Close();
ms.Dispose();
return bData;
} public static DataSet ConvertByteArrayToDataSet(Byte[] aByte)
{
DataSet resultDs = null;
MemoryStream ms = new MemoryStream(aByte);
IFormatter bf = new BinaryFormatter(); try
{ object obj = bf.Deserialize(ms);
resultDs = (DataSet)obj;
ms.Close();
return resultDs;
}
catch (Exception ex)
{
throw ex; }
finally
{
if (ms != null) ms.Close();
resultDs.Dispose(); } }
/// <summary>
/// 将DataSet格式化成字节数组byte[]
/// </summary>
/// <param name="dsOriginal">DataSet对象</param>
/// <returns>字节数组</returns>
public static Byte[] ConvertDataSetToByteArray(DataSet aDs)
{
//保存序列化的对象
Byte[] tranData; //创建内存流
MemoryStream ms = new MemoryStream();
//创建格式化对象
IFormatter bf = new BinaryFormatter(); try
{
if (aDs == null) return null;
//设置序列化的方式
aDs.RemotingFormat = SerializationFormat.Binary;
//序列化字节对象
bf.Serialize(ms, aDs);
//把流转换成字节数组
tranData = ms.ToArray();
ms.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
if (ms != null) ms.Close();
} return tranData;
} /// <summary>
/// 把list转换成dataset
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list"></param>
/// <returns></returns>
public static DataSet ConvertToDataSet<T>(IList<T> list)
{
if (list == null || list.Count <= 0)
{
return null;
} //创建dataset 对象
DataSet ds = new DataSet();
//创建表的,并且以类型的名字命名
DataTable dt = new DataTable(typeof(T).Name);
DataColumn column;
DataRow row;
//通过反射得到属性对象,只能得到简单的属性
System.Reflection.PropertyInfo[] myPropertyInfo
= typeof(T).GetProperties(System.Reflection.BindingFlags.Public
| System.Reflection.BindingFlags.Instance);
//遍历集合,遍历一次创建一行
foreach (T t in list)
{
if (t == null)
{
continue;
} row = dt.NewRow(); //根据属性创建列
for (int i = 0, j = myPropertyInfo.Length; i < j; i++)
{
System.Reflection.PropertyInfo pi = myPropertyInfo[i]; string name = pi.Name;
if (name.Trim().ToLower().Equals("lastmodify"))
{
continue;
}
//判断列的值为不为空
if (dt.Columns[name] == null)
{
//获得属性的类型,作为列的类型
Type colType = pi.PropertyType;
//感觉这个if语句没啥用,有知道的朋友给我留言,谢谢了
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
== typeof(Nullable<>)))
{
colType = colType.GetGenericArguments()[0];
}
column = new DataColumn(name, colType);
dt.Columns.Add(column);
}
//获得属性的值,判断是不是为空
row[name] = pi.GetValue(t, null) == null ? DBNull.Value
: pi.GetValue(t, null);
} dt.Rows.Add(row);
} ds.Tables.Add(dt); return ds;
} public static List<T> GetList<T>(DataSet ds )
{
DataTable table = ds.Tables[0];
List<T> list = new List<T>();
//
T t = default(T);
PropertyInfo[] propertypes = null;
string tempName = string.Empty;
try
{
foreach (DataRow row in table.Rows)
{
//动态创建一个对象
t = Activator.CreateInstance<T>();
//获得该类的所有属性
propertypes = t.GetType().GetProperties();
//遍历属性
foreach (PropertyInfo pro in propertypes)
{
//属性名
tempName = pro.Name;
//检查表中是否包含该列
if (table.Columns.Contains(tempName))
{
object value = row[tempName]; //值不能为空, if (value != null && value != DBNull.Value && row[tempName].ToString() != null &&
!row[tempName].ToString().Trim().Equals(""))
{
if (tempName.Trim().ToLower().Equals("lastmodify"))
{
// pro.SetValue(t, ConvertHelper.ConvertToTimestamp(Convert.ToString(value)), null);
}
else
{
//char类型单独处理
if (pro.PropertyType == typeof(System.Char)
|| pro.PropertyType == typeof(System.Nullable<System.Char>))
{
pro.SetValue(t, Convert.ToChar(value), null);
}
else
{
pro.SetValue(t, value, null);
} }
} //if (value.GetType() == typeof(System.DBNull))
//{
// value = null;
//}
//if (tempName.Trim().Equals("lastmodify"))
//{
// pro.SetValue(t,Convert.to //pro.SetValue(t, 0, null);
//}
//else
//{
// pro.SetValue(t, value, null);
//}
}
}
list.Add(t);
}
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
return list;
} }
 static void Main(string[] args)
{ // using (BookShop2Entities context = new BookShop2Entities()) {
List<User<string>> list = new List<User<string>>{
new User<string>(){Age=90}
};
//把list集合转化成dataset
DataSet ds = YS.ConvertToDataSet(list); //压缩dataset
byte[] byes =YS.ConvertDataSetToByteArray(ds);
Console.WriteLine("压缩之前字节数"+byes.Length);
byte[] byesYS =YS.Compress(byes);
Console.WriteLine("压缩之后字节数" + byesYS.Length);
byte[] byesJZ = YS.Decompress(byesYS);
Console.WriteLine("解压之后字节数" + byesJZ.Length);
//解压成dataset
DataSet ds2 = YS.ConvertByteArrayToDataSet(byesJZ); //
Console.WriteLine("完成");
Console.Read(); }

这个自己写的,有什么问题可以给我留言

c#对dataset和list集合压缩和解压,能提高访问速度的更多相关文章

  1. ZipHelper 压缩和解压帮助类

    ZipHelper 压缩和解压帮助类 关于本文档的说明 本文档基于ICSharpCode.SharpZipLib.dll的封装,常用的解压和压缩方法都已经涵盖在内,都是经过项目实战积累下来的 欢迎传播 ...

  2. 【C#公共帮助类】WinRarHelper帮助类,实现文件或文件夹压缩和解压,实战干货

    关于本文档的说明 本文档使用WinRAR方式来进行简单的压缩和解压动作,纯干货,实际项目这种压缩方式用的少一点,一般我会使用第三方的压缩dll来实现,就如同我上一个压缩类博客,压缩的是zip文件htt ...

  3. C#文件或文件夹压缩和解压方法(通过ICSharpCode.SharpZipLib.dll)

    我在网上收集一下文件的压缩和解压的方法,是通过ICSharpCode.SharpZipLib.dll 来实现的 一.介绍的目录 第一步:下载压缩和解压的 ICSharpCode.SharpZipLib ...

  4. java 文件压缩和解压(ZipInputStream, ZipOutputStream)

    最近在看java se 的IO 部分 , 看到 java 的文件的压缩和解压比较有意思,主要用到了两个IO流-ZipInputStream, ZipOutputStream,不仅可以对文件进行压缩,还 ...

  5. C#实现通过Gzip来对数据进行压缩和解压

    C#实现通过Gzip来对数据进行压缩和解压 internal static byte[] Compress(byte[] data) { using (var compressedStream = n ...

  6. linux常用命令:4文件压缩和解压命令

    文件压缩和解压命令 压缩命令:gzip.tar[-czf].zip.bzip2 解压缩命令:gunzip.tar[-xzf].unzip.bunzip2 1. 命令名称:gzip 命令英文原意:GNU ...

  7. .net文件压缩和解压及中文文件夹名称乱码问题

    /**************************注释区域内为引用http://www.cnblogs.com/zhaozhan/archive/2012/05/28/2520701.html的博 ...

  8. linux下文件加密压缩和解压的方法

    一.用tar命令 对文件加密压缩和解压 压缩:tar -zcf  - filename |openssl des3 -salt -k password | dd of=filename.des3 此命 ...

  9. Linux下的压缩和解压

    1. gzip, bzip2 能否直接压缩目录呢?不可以 2. 请快速写出,使用gzip和bzip2压缩和解压一个文件的命令.压缩:gzip 1.txt bzip2 1.txt解压:gzip -d 1 ...

随机推荐

  1. linux安装jdk以及tomcat

    一.卸载旧jdk 1.检测原OPENJDK版本 java -version 查看是否安装了jdk,并且是什么版本 2.进一步查看JDK信息 rpm -qa|grep java tzdata-java- ...

  2. Java 16进制转10进制

    牛课网上的题目 char '1'和 int 1给我好好上了一课 package suanfa; import java.util.*; public class Main{ public static ...

  3. tomcat部署war包

    部署步骤 1.下载tomcat 直接在网上下载即可,随便把包下到一个地方 下面文中的xxx均代表tomcat的安装目录   2.将java工程导出war包 在intellij idea的执行左侧选中t ...

  4. 第一次登录mysql,使用任何命令都报错ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

    问题: 使用临时密码登录成功后,使用任何myql命令,例如show databases;都提示下面的报错 ERROR 1820 (HY000): You must reset your passwor ...

  5. artTemplate js模板引擎动态给html赋值

    html放到$("#area").append(html);之前,否则文档流获取不到#area <table width="90%" class=&quo ...

  6. LightOJ - 1027 Dangerous Maze 期望

    你在迷宫中;开始时在你面前看到n扇门.你可以选择你喜欢的任何门.所有门的选择门的概率是相等的. 如果您选择第i个门,它可以让您回到您在xi(xi小于0)分钟内开始的相同位置,也可以在xi(xi大于0) ...

  7. npm、webpack、vue-cli快速上手版

    node.js和npm npm的安装和更新 Node.js下载安装,npm自带的包管理工具. 查看安装版本信息: node -v 查看node.js版本信息 npm -v 查看npm版本信息 更新np ...

  8. Array 遍历数组

    public static void main(String args){ int a[][] = new int[3][4]; for(int i=0;i<a.length;i++){ for ...

  9. 通达OA 自定义菜单

    1.首先在系统管理----菜单设置中添加菜单主分类,菜单的图片默认是在D:\MYOA\webroot\images中.2.然后再编辑该菜单的下一级,增加子菜单项,子菜单的路径就是您要设置的网址.3.最 ...

  10. @CookieValue使用须知

    ------------------------siwuxie095                             @CookieValue 使用须知         使用 @CookieV ...