- 浏览: 261110 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
nanfei:
运行没看到反应~
Android利用Http下载文件 -
jebai0521:
学习了,有点错误!
Android利用Http下载文件 -
avalonzst:
mark一下.写的真不错.
Oracle中的DDL语句 -
284772894:
Good,不错,新手学习中
android中的布局 -
zhiwen2050:
<script>alert("张三&qu ...
grid++ report在线报表的使用笔记
.net 利用 GZipStream 压缩和解压缩
1.GZipStream 类
此类在 .NET Framework 2.0 版中是新增的。
提供用于压缩和解压缩流的方法和属性
2.压缩byte[]
/// <summary> /// 压缩数据 /// </summary> /// <param name="data"></param> /// <returns></returns> public byte[] Compress(byte[] data) { MemoryStream ms = new MemoryStream(); GZipStream zipStream = new GZipStream(ms, CompressionMode.Compress); zipStream.Write(data, 0, data.Length);//将数据压缩并写到基础流中 zipStream.Close(); return ms.ToArray(); }
3.解压byte[]
/// 解压数据 /// </summary> /// <param name="data"></param> /// <returns></returns> public byte[] Decompress(byte[] data) { MemoryStream srcMs = new MemoryStream(data); GZipStream zipStream = new GZipStream(srcMs, CompressionMode.Decompress); MemoryStream ms = new MemoryStream(); byte[] bytes = new byte[40960]; int n; while ((n = zipStream.Read(bytes, 0, bytes.Length)) > 0) { ms.Write(bytes, 0, n); } zipStream.Close(); return ms.ToArray(); }
4.压缩byte[]数据,存放到文件中
/// <summary> /// 将指定的字节数组压缩,并写入到目标文件 /// </summary> /// <param name="srcBuffer">指定的源字节数组</param> /// <param name="destFile">指定的目标文件</param> public static void CompressData(byte[] srcBuffer, string destFile) { FileStream destStream = null; GZipStream compressedStream = null; try { //打开文件流 destStream = new FileStream(destFile, FileMode.OpenOrCreate, FileAccess.Write); //指定压缩的目的流(这里是文件流) compressedStream = new GZipStream(destStream, CompressionMode.Compress, true); //往目的流中写数据,而流将数据写到指定的文件 compressedStream.Write(srcBuffer, 0, srcBuffer.Length); } catch (Exception ex) { throw new Exception(String.Format("压缩数据写入文件{0}时发生错误", destFile), ex); } finally { // Make sure we allways close all streams if (null != compressedStream) { compressedStream.Close(); compressedStream.Dispose(); } if (null != destStream) destStream.Close(); } }
5.解压文件,得到byte[]数据
/// <summary> /// 将指定的文件解压,返回解压后的数据 /// </summary> /// <param name="srcFile">指定的源文件</param> /// <returns>解压后得到的数据</returns> public static byte[] DecompressData(string srcFile) { if (false == File.Exists(srcFile)) throw new FileNotFoundException(String.Format("找不到指定的文件{0}", srcFile)); FileStream sourceStream = null; GZipStream decompressedStream = null; byte[] quartetBuffer = null; try { sourceStream = new FileStream(srcFile, FileMode.Open, FileAccess.Read, FileShare.Read); decompressedStream = new GZipStream(sourceStream, CompressionMode.Decompress, true); // Read the footer to determine the length of the destiantion file //GZIP文件格式说明: //10字节的头,包含幻数、版本号以及时间戳 //可选的扩展头,如原文件名 //文件体,包括DEFLATE压缩的数据 //8字节的尾注,包括CRC-32校验和以及未压缩的原始数据长度(4字节) 文件大小不超过4G //为Data指定byte的长度,故意开大byte数据的范围 //读取未压缩的原始数据长度 quartetBuffer = new byte[4]; long position = sourceStream.Length - 4; sourceStream.Position = position; sourceStream.Read(quartetBuffer, 0, 4); int checkLength = BitConverter.ToInt32(quartetBuffer, 0); byte[] data; if (checkLength <= sourceStream.Length) { data = new byte[Int16.MaxValue]; } else { data = new byte[checkLength + 100]; } //每100byte从解压流中读出数据,并将读出的数据Copy到Data byte[]中,这样就完成了对数据的解压 byte[] buffer = new byte[100]; sourceStream.Position = 0; int offset = 0; int total = 0; while (true) { int bytesRead = decompressedStream.Read(buffer, 0, 100); if (bytesRead == 0) break; buffer.CopyTo(data, offset); offset += bytesRead; total += bytesRead; } //剔除多余的byte byte[] actualdata = new byte[total]; for (int i = 0; i < total; i++) actualdata[i] = data[i]; return actualdata; } catch (Exception ex) { throw new Exception(String.Format("从文件{0}解压数据时发生错误", srcFile), ex); } finally { if (sourceStream != null) sourceStream.Close(); if (decompressedStream != null) decompressedStream.Close(); } }
6.小结
压缩,解压都用GZipStream,操作的对象时普通流MemoryStream,不同的是:
压缩是将btye[]型的数据写入GZipStream中,而解压的时候是将GzipStream中的数据写入到byte[]中,并将读出的数据写入到MemoryStream后一次性输出
压缩到文件与压缩成byte[]不同的是压缩到文件利用到了FileStream将流写到文件,解压Gzip文件,需要根据文件的规则进行:后4位记录未压缩前的长度,根据该长度可以将解压出来的文件存放到稍大的byte[]中
- GZipUtil.rar (1.8 KB)
- 下载次数: 34
发表评论
-
.net的一些零散知识点
2012-08-01 09:09 748.net的一些零散知识点 一、using 关键字 参考: ... -
.net Web.Config配置文件
2012-07-26 09:23 3056.net Web.Config配置文件 一、配置信息 ... -
.net Application.DoEvents()
2012-06-15 23:06 1795.net Application.DoEvents() 如 ... -
.net ComboBox与DX中的ComboBoxEdit绑定数据
2012-06-15 22:48 3402.net ComboBox与DX中的ComboBoxEdit绑 ... -
.net中的一些IO操作
2012-06-07 16:08 672.net中的一些IO操作 1.检查目录的存在和创建目录 ... -
.net中的异常
2012-06-07 16:03 655.net中的异常 原文:http://topic.csdn. ... -
.net中的一些概念
2012-06-07 15:47 627.net中的一些概念 一.AppDomain Repres ... -
.net 中的退出
2012-06-07 15:35 915.net 中的退出 1.Application.Exit() ... -
.net WebService 大数据量时性能的提高
2012-06-07 00:47 4878.net WebService 大数据量时性能的提高 1.直 ... -
用DataSetSurrogate加速WebService
2012-06-06 20:52 1421用DataSetSurrogate加速WebService ... -
.net 序列化 反序列化
2012-06-06 17:41 1238.net 序列化 反序列化 ... -
ado.net 知识点
2012-06-06 17:19 1232ado.net 知识点 一.ado.net ADO.N ... -
.net WebService HelloWorld
2012-06-06 16:01 1479.net WebService HelloWorld 1.W ... -
C#中的保留小数点
2012-04-09 22:15 1014C#中的保留小数点 1、Math.Round(0.33333 ... -
C#语言入门学习笔记
2012-02-14 14:10 938C#语言入门学习笔记 一、C#是什么 C#(读作“C ...
相关推荐
本文将深入探讨如何使用VB.NET(Visual Basic .NET)来实现内存Stream对JPG图像进行压缩和解压缩。 首先,我们需要了解JPEG(Joint Photographic Experts Group)格式,这是一种广泛用于存储和传输图像的有损压缩...
在ASP.NET中,为了实现文件的压缩和解压缩,我们可以利用.NET框架提供的`DeflateStream`和`GZipStream`类。这两个类位于`System.IO.Compression`命名空间下,它们分别对应DEFLATE和gzip两种不同的压缩算法,这两种...
在本文中,我们将探讨如何在 ASP.NET 中利用 WinRAR 工具进行文件的压缩和解压缩操作。 首先,WinRAR 是一款流行的压缩软件,提供了命令行界面供用户执行各种压缩和解压缩任务。在 ASP.NET 应用中,可以借助系统...
总结一下,ASP.NET 提供了丰富的压缩和解压缩工具,如 GZipStream、DeflateStream 和 ZipArchive,这些工具可以帮助开发者高效地处理文件和数据的压缩需求。通过灵活运用这些工具,开发者可以在 ASP.NET 应用程序中...
`GZipStream`是这个命名空间中的一个关键类,它实现了GZIP压缩算法,可以用于处理数据流的压缩和解压缩。本篇文章将详细介绍如何利用`GZipStream`和C#进行文件或文件夹的压缩操作。 一、GZipStream介绍 GZipStream...
在.NET框架中,进行文件的压缩和解压缩是常见的任务,尤其在数据传输、存储优化或者备份场景下。本文将围绕".NET压缩解压缩示例"这个主题,深入讲解如何在.NET环境下使用SharpZLib库进行文件的压缩与解压缩操作。 ...
在.NET框架中,`System.IO.Compression.GZipStream`类提供了处理gzip压缩和解压缩的功能。开发者可以使用这个类来读取或写入数据流,并将数据实时地压缩或解压缩。例如,你可以创建一个`FileStream`对象来读取或写入...
在.NET Framework中,GZipStream是一个用于压缩和解压缩数据的流类,它是System.IO.Compression命名空间的一部分。在Web服务中,我们可以将数据序列化为二进制形式,然后利用GZipStream进行压缩,再通过WebService...
在Asp.NET 2.0框架中,开发人员经常需要处理文件的压缩和解压缩操作,这在数据传输、存储优化或提供下载服务时尤为重要。本示例源码旨在演示如何在ASP.NET环境中实现这一功能,使开发者能够方便地对文件和目录进行...
在ASP.NET中,实现在线文件的压缩和解压缩功能是非常常见的需求,这有助于提高数据传输效率,减小网络流量。在给定的场景中,我们关注的核心知识点包括: 1. **文件操作**:在ASP.NET中,对文件的操作通常涉及`...
在程序实现中,可能使用了.NET Framework或.NET Core的`System.IO.Compression`命名空间,该命名空间提供了GZipStream、DeflateStream等类用于压缩和解压缩数据。然而,由于RAR格式不被内置支持,所以可能需要借助第...
总结来说,这个基于C#的Compress and Decompress类库源码主要关注于利用.NET Framework的GZipStream类实现文件的压缩和解压缩,这对于C#开发者来说,是一个很好的学习资源,可以帮助他们掌握数据压缩技术,并在实际...
Zlib.NET是由GzipFile和DeflateStream类提供的.NET Framework上的一个接口,它允许开发者在C#或VB.NET等.NET语言中轻松地进行数据压缩和解压缩。Zlib.NET实现了DEFLATE压缩算法,这是ZIP、PNG和其他许多文件格式的...
GZipStream是.NET Framework中的一个类,用于压缩和解压缩数据流。它支持使用GZIP算法对数据流进行压缩和解压缩。 在C#中使用GZipStream实现文件的压缩与解压需要引入System.IO.Compression命名空间。GZipStream类...
在`描述`中提到的`DataSetSurrogate.dll`,这很可能是一个自定义的dll组件,它提供了专门针对DataSet对象的序列化和反序列化的功能,可能还包括压缩和解压缩的实现。通常,这样的组件会封装上述的压缩过程,使开发者...
在.NET框架中,文件压缩和解压缩可以借助System.IO.Compression命名空间中的类来实现,如GZipStream和DeflateStream。然而,这些基本类可能需要编写较多的代码才能在ASP.NET页面上实现用户友好的交互。因此,专用的...
在压缩包中的"数据压缩源码"文件,很可能是提供了一些具体的VB.NET代码示例,展示如何使用上述.NET框架提供的类来压缩和解压缩数据。这些示例可以帮助开发者理解如何在实际项目中集成压缩功能,比如在文件上传、下载...
首先,C#中实现压缩和解压缩功能主要依赖于.NET Framework提供的System.IO.Compression命名空间,它包含了GZipStream和DeflateStream类,可以实现GZIP和DEFLATE两种压缩算法。此外,ZipArchive类则提供了对ZIP文件...
【zlib.NET_104 zlib C#版】是一个针对C#编程语言的开源库,它实现了著名的zlib压缩算法,使得.NET开发者可以方便地在他们的应用中进行数据压缩和解压缩操作。zlib是由Jean-loup Gailly和Mark Adler开发的一个无损...