using System;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.BZip2;
using ICSharpCode.SharpZipLib.GZip;
using ICSharpCode.SharpZipLib.Zip;
namespace Compression
{
/// <summary>
/// 压缩方式。
/// </summary>
public enum CompressionType
{
GZip,
BZip2,
Zip
}
/// <summary>
/// 使用 SharpZipLib 进行压缩的辅助类,简化压缩字节数组和字符串的操作。
/// </summary>
public class CompressionHelper
{
/// <summary>
/// 压缩供应者,默认为 GZip。
/// </summary>
public static CompressionType CompressionProvider = CompressionType.GZip;
#region Public methods
/// <summary>
/// 从原始字节数组生成已压缩的字节数组。
/// </summary>
/// <param name="bytesToCompress">原始字节数组。</param>
/// <returns>返回已压缩的字节数组</returns>
public static byte[] Compress( byte[] bytesToCompress )
{
MemoryStream ms = new MemoryStream();
Stream s = OutputStream( ms );
s.Write( bytesToCompress, 0, bytesToCompress.Length );
s.Close();
return ms.ToArray();
}
/// <summary>
/// 从原始字符串生成已压缩的字符串。
/// </summary>
/// <param name="stringToCompress">原始字符串。</param>
/// <returns>返回已压缩的字符串。</returns>
public static string Compress( string stringToCompress )
{
byte[] compressedData = CompressToByte( stringToCompress );
string strOut = Convert.ToBase64String( compressedData );
return strOut;
}
/// <summary>
/// 从原始字符串生成已压缩的字节数组。
/// </summary>
/// <param name="stringToCompress">原始字符串。</param>
/// <returns>返回已压缩的字节数组。</returns>
public static byte[] CompressToByte( string stringToCompress )
{
byte[] bytData = Encoding.Unicode.GetBytes( stringToCompress );
return Compress( bytData );
}
/// <summary>
/// 从已压缩的字符串生成原始字符串。
/// </summary>
/// <param name="stringToDecompress">已压缩的字符串。</param>
/// <returns>返回原始字符串。</returns>
public string DeCompress( string stringToDecompress )
{
string outString = string.Empty;
if ( stringToDecompress == null )
{
throw new ArgumentNullException("stringToDecompress", "You tried to use an empty string");
}
try
{
byte[] inArr = Convert.FromBase64String(stringToDecompress.Trim());
outString = Encoding.Unicode.GetString(DeCompress(inArr));
}
catch (NullReferenceException nEx)
{
return nEx.Message;
}
return outString;
}
/// <summary>
/// 从已压缩的字节数组生成原始字节数组。
/// </summary>
/// <param name="bytesToDecompress">已压缩的字节数组。</param>
/// <returns>返回原始字节数组。</returns>
public static byte[] DeCompress( byte[] bytesToDecompress )
{
byte[] writeData = new byte[4096];
Stream s2 = InputStream( new MemoryStream( bytesToDecompress ) );
MemoryStream outStream = new MemoryStream();
while (true)
{
int size = s2.Read( writeData, 0, writeData.Length );
if ( size > 0 )
{
outStream.Write( writeData, 0, size );
}
else
{
break;
}
}
s2.Close();
byte[] outArr = outStream.ToArray();
outStream.Close();
return outArr;
}
#endregion
#region Private methods
/// <summary>
/// 从给定的流生成压缩输出流。
/// </summary>
/// <param name="inputStream">原始流。</param>
/// <returns>返回压缩输出流。</returns>
private static Stream OutputStream( Stream inputStream )
{
switch ( CompressionProvider )
{
case CompressionType.BZip2:
return new BZip2OutputStream( inputStream );
case CompressionType.GZip:
return new GZipOutputStream( inputStream );
case CompressionType.Zip:
return new ZipOutputStream( inputStream );
default:
return new GZipOutputStream( inputStream );
}
}
/// <summary>
/// 从给定的流生成压缩输入流。
/// </summary>
/// <param name="inputStream">原始流。</param>
/// <returns>返回压缩输入流。</returns>
private static Stream InputStream( Stream inputStream )
{
switch (CompressionProvider)
{
case CompressionType.BZip2:
return new BZip2InputStream(inputStream);
case CompressionType.GZip:
return new GZipInputStream(inputStream);
case CompressionType.Zip:
return new ZipInputStream(inputStream);
default:
return new GZipInputStream(inputStream);
}
}
#endregion
}
}
相关推荐
### 图像压缩技术中的离散余弦变换及Matlab实现 #### 核心知识点解析 本文探讨了在图像压缩领域中应用离散余弦变换(Discrete Cosine Transform, DCT)并结合Matlab实现的技术细节。研究的核心在于对DCT进行硬件...
public class ZipClass { public void ZipFile(string FileToZip, string ZipedFile, int CompressionLevel, int BlockSize) { // 检查文件是否存在 if (!System.IO.File.Exists(FileToZip)) { throw new ...
using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Decompress)) { using (var reader = new StreamReader(gzipStream)) { return reader.ReadToEnd(); } } } } ``` 以上代码中,`...
DISTRIBUTED IMAGE COMPRESSION FOR SENSOR NETWORKS USING CORRESPONDENCE ANALYSIS AND SUPER-RESOLUTION LOCALIZATION OF TAMPERING IN CONTRAST AND BRIGHTNESS ADJUSTED IMAGES USING DISTRIBUTED SOURCE ...
using (var gzipStream = new GZipStream(compressedStream, CompressionMode.Decompress)) using (var unCompressedStream = new MemoryStream()) { gzipStream.CopyTo(unCompressedStream); var ...
ICSharpCode.SharpZipLib Compression Library 帮助文件
标题“Video coding using the H.264 MPEG-4 AVC compression standard”指出文章将围绕H.264/MPEG-4 AVC视频压缩标准进行探讨,主要聚焦于该标准在视频编码领域的应用及其技术特性。 #### 描述解析 描述部分同样...
《使用修改过的离散余弦变换进行音频压缩:MP3编码标准》 本文研究的重点是将修改后的离散余弦变换(MDCT)应用于音频压缩,特别是MP3标准中的应用。MDCT在感知音频编码中扮演着至关重要的角色。...
public class FileCompression { public static void Compress(string sourcePath, string targetArchivePath) { // 实现压缩逻辑 } public static void Decompress(string sourceArchivePath, string ...
标题中的“Fast LZW Compression Using Binary Tree”是指一种利用二叉树实现的快速LZW(Lempel-Ziv-Welch)压缩算法。LZW压缩是一种广泛用于数据压缩的无损压缩方法,尤其在文本和图像文件的压缩中非常常见。这种...
using ICSharpCode.SharpZipLib.Zip; using System.Web; public class CompressViewStateModule : IHttpModule { public void Init(HttpApplication context) { context.PreRequestHandlerExecute += Context_...
在“Lossless image compression using Matlab”项目中,可能包含了实现这些无损压缩算法的MATLAB代码示例,包括霍夫曼编码、算术编码、游程编码或LZW编码,也可能涉及到其他高级技术如预测编码、DPCM(差分脉冲编码...
In the best case, a file consisting of just one symbol will be encoded with a compression ratio of 1:8. Huffman coding is used in image compression; however, in JPEG2000, an arithmetic codec is ...
如果你需要这些特性,可能需要寻找其他的库,如SharpCompress或System.IO.Compression。 总的来说,ICSharpCode.SharpZipLib是.NET开发人员进行数据压缩的理想选择,它的强大功能、易用性和开源性质使其在众多压缩...
4. **7-Zip支持**:虽然7-Zip格式支持相对较新,但SharpZipLib提供了`SevenZip.Compression.Lzma`和`SevenZip.Compression.SparseMemoryStream`等类,以处理7z文件。 三、实际应用 1. **数据备份**:在备份应用程序...
例如,`CompressionHelper.cs`文件中可能包含了此类功能的实现。在这个文件中,开发者可以找到像`Compress()`和`Decompress()`这样的方法,它们分别用于执行压缩和解压缩操作。 以下是一个简单的使用示例: ```...
《使用H.264/MPEG-4 AVC压缩标准进行视频编码》 一、H.264/MPEG-4 AVC标准概览 H.264/MPEG-4 AVC是ITU-T VCEG(视频编码专家组)与ISO/IEC MPEG(运动图像专家组)联合开发的一项最新视频压缩标准。...
public static class CompressionHelper { public static void CompressFiles(string[] fileNames, string outputZipFileName) { // 上述CompressFiles方法的实现 } } ``` 现在,我们可以通过`Compression...
### 数据压缩利用长公共字符串 #### 引言与背景 数据压缩是计算机科学中的一个重要领域,旨在通过减少数据表示所需的位数来节省存储空间或提高传输效率。在文本压缩方面,一种常用的方法是识别并替换重复出现的...
6. **自定义设置**:在处理ZIP文件时,可以调整各种参数,例如压缩级别(`CompressionLevel`)、压缩方法(`CompressionMethod`)等,以满足特定需求。 7. **错误处理和安全性**:在处理ZIP文件时,务必处理可能...