c# 压缩与解压
来源:互联网 发布:网校程序源码 编辑:程序博客网 时间:2024/06/02 16:02
<pre class="csharp" name="code">using System;using System.Collections.Generic;using System.Text;using System.IO;using System.IO.Compression;using System.Xml.Serialization;using System.Xml;using System.Data;using System.Runtime.Serialization.Formatters.Binary;using System.Runtime.Serialization;namespace JTK.IOHelper{ public class SerializerDeserialize { public static byte [] Serializer(object obj) { IFormatter formatter = new BinaryFormatter();//定义BinaryFormatter以序列化object对象 MemoryStream ms = new MemoryStream();//创建内存流对象 formatter.Serialize(ms, obj);//把object对象序列化到内存流 byte[] buffer = ms.ToArray();//把内存流对象写入字节数组 ms.Close();//关闭内存流对象 ms.Dispose();//释放资源 MemoryStream msNew = new MemoryStream(); GZipStream gzipStream = new GZipStream(msNew, CompressionMode.Compress, true);//创建压缩对象 gzipStream.Write(buffer, 0, buffer.Length);//把压缩后的数据写入文件 gzipStream.Close();//关闭压缩流,这里要注意:一定要关闭,要不然解压缩的时候会出现小于4K的文件读取不到数据,大于4K的文件读取不完整 gzipStream.Dispose();//释放对象 msNew.Close(); msNew.Dispose(); return msNew.ToArray(); } /// <summary> /// 反序列化压缩的object /// </summary> /// <param name="_filePath"></param> /// <returns></returns> public static object Deserialize(byte[] bytes) { MemoryStream msNew = new MemoryStream(bytes); msNew.Position = 0; GZipStream gzipStream = new GZipStream(msNew, CompressionMode.Decompress);//创建解压对象 byte[] buffer = new byte[4096];//定义数据缓冲 int offset = 0;//定义读取位置 MemoryStream ms = new MemoryStream();//定义内存流 while ((offset = gzipStream.Read(buffer, 0, buffer.Length)) != 0) { ms.Write(buffer, 0, offset);//解压后的数据写入内存流 } BinaryFormatter sfFormatter = new BinaryFormatter();//定义BinaryFormatter以反序列化object对象 ms.Position = 0;//设置内存流的位置 object obj; try { obj = (object)sfFormatter.Deserialize(ms);//反序列化 } catch { throw; } finally { ms.Close();//关闭内存流 ms.Dispose();//释放资源 } gzipStream.Close();//关闭解压缩流 gzipStream.Dispose();//释放资源 msNew.Close(); msNew.Dispose(); return obj; } }}
<p> #region 压缩解压object public static byte[] CompressionObject(object DataOriginal) { if (DataOriginal == null) return null; BinaryFormatter bFormatter = new BinaryFormatter(); MemoryStream mStream = new MemoryStream(); bFormatter.Serialize(mStream, DataOriginal); byte[] bytes = mStream.ToArray(); MemoryStream oStream = new MemoryStream(); DeflateStream zipStream = new DeflateStream(oStream, CompressionMode.Compress); zipStream.Write(bytes, 0, bytes.Length); zipStream.Flush(); zipStream.Close(); return oStream.ToArray(); }</p><p> public static object DecompressionObject(byte[] bytes) { if (bytes == null) return null; MemoryStream mStream = new MemoryStream(bytes); mStream.Seek(0, SeekOrigin.Begin); DeflateStream unZipStream = new DeflateStream(mStream, CompressionMode.Decompress, true); object dsResult = null; BinaryFormatter bFormatter = new BinaryFormatter(); dsResult = (object)bFormatter.Deserialize(unZipStream); return dsResult; } #endregion</p>
0 0
- c# 压缩与解压
- C# 文件压缩与解压
- C#下文件的压缩与解压
- C#调用RAR压缩与解压
- C#压缩与解压文件源码
- C#调用RAR压缩与解压
- C# 文件压缩与解压(ZIP格式)
- C#调用RAR压缩与解压
- C# 文件压缩与解压(ZIP格式)
- C#使用DeflateStream压缩与解压
- C# 文件压缩与解压(ZIP格式)
- C# 文件压缩与解压(ZIP格式)
- C# 压缩,解压
- c# 压缩解压文件
- C#压缩解压程序
- C# 压缩解压文件
- C# GZipStream 压缩 解压
- c# 压缩解压 方法
- 求字符串最大的重复字串
- VBS基础篇 - 杂项 - 字符集
- UVA - 1404 Prime k-tuple (素数筛选)
- 如何修改android工程的包名
- IIR 滤波器的实现(C++)
- c# 压缩与解压
- 利用poi导出word excel
- 什么是守护进程?
- coco2dx-3.2 MAC版本环境搭配细节
- 自定义组合控件属性,自定义对话框,md5加密,自定义按钮背景,
- storm简介
- VBS基础篇 - 杂项 - Sendkeys
- 有关前台传后台参数乱码的处理
- C++ List的用法(整理)