`
coollifer
  • 浏览: 55793 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

对文件和字符串压缩及解压缩类

阅读更多
    /// <summary>
    /// 对文件和字符串压缩及解压缩类
    /// </summary>
    public class GZip
    {
        /// <summary>
        /// 对字符串进行压缩
        /// </summary>
        /// <param name="str">待压缩的字符串</param>
        /// <returns>压缩后的字符串</returns>
        public static string CompressString(string str)
        {
            string compressString = "";
            byte[] compressBeforeByte = Encoding.Default.GetBytes(str);
            byte[] compressAfterByte=GZip.Compress(compressBeforeByte);
            compressString = Encoding.Default.GetString(compressAfterByte);
            return compressString;
        }
        /// <summary>
        /// 对字符串进行解压缩
        /// </summary>
        /// <param name="str">待解压缩的字符串</param>
        /// <returns>解压缩后的字符串</returns>
        public static string DecompressString(string str)
        {
            string compressString = "";
            byte[] compressBeforeByte = Encoding.Default.GetBytes(str);
            byte[] compressAfterByte = GZip.Decompress(compressBeforeByte);
            compressString = Encoding.Default.GetString(compressAfterByte);
            return compressString;
        }
        /// <summary>
        /// 对文件进行压缩
        /// </summary>
        /// <param name="sourceFile">待压缩的文件名</param>
        /// <param name="destinationFile">压缩后的文件名</param>
        public static void CompressFile(string sourceFile, string destinationFile)
        {
            throw new Exception("The method or operation is not implemented.");
        }
        /// <summary>
        /// 对文件进行解压缩
        /// </summary>
        /// <param name="sourceFile">待解压缩的文件名</param>
        /// <param name="destinationFile">解压缩后的文件名</param>
        /// <returns></returns>
        public static void DecompressFile(string sourceFile, string destinationFile)
        {
            throw new Exception("The method or operation is not implemented.");
        }
        /// <summary>
        /// 对byte数组进行压缩
        /// </summary>
        /// <param name="data">待压缩的byte数组</param>
        /// <returns>压缩后的byte数组</returns>
        public static byte[] Compress(byte[] data)
        {
            try
            {
                MemoryStream ms = new MemoryStream();
                GZipStream zip = new GZipStream(ms, CompressionMode.Compress,true);
                zip.Write(data, 0, data.Length);
                zip.Close();
                byte[] buffer = new byte[ms.Length];
                ms.Position=0;
                ms.Read(buffer, 0, buffer.Length);
                ms.Close();
                return buffer;

            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        public static byte[] Decompress(byte[] data)
        {
            try
            {
                MemoryStream ms = new MemoryStream(data);
                GZipStream zip = new GZipStream(ms,CompressionMode.Decompress,true);
                MemoryStream msreader = new MemoryStream();
                byte[] buffer = new byte[0x1000];
                while (true)
                {
                    int reader=zip.Read(buffer, 0, buffer.Length);
                    if (reader <= 0)
                    {
                        break;
                    }
                    msreader.Write(buffer, 0, reader);                   
                }
                zip.Close();
                ms.Close();
                msreader.Position = 0;
                buffer = msreader.ToArray();
                msreader.Close();
                return buffer;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
        }
        //// <summary>
        /// 对目标文件夹进行压缩,将压缩结果保存为指定文件
        /// </summary>
        /// <param name="dirPath">目标文件夹</param>
        /// <param name="fileName">压缩文件</param>
        public static void Compress(string dirPath, string fileName)
        {
            ArrayList list = new ArrayList();
            foreach (string f in Directory.GetFiles(dirPath))
            {
                byte[] destBuffer = File.ReadAllBytes(f);
                SerializeFileInfo sfi = new SerializeFileInfo(f, destBuffer);
                list.Add(sfi);
            }
            IFormatter formatter = new BinaryFormatter();
            using (Stream s = new MemoryStream())
            {
                formatter.Serialize(s, list);
                s.Position = 0;
                CreateCompressFile(s, fileName);
            }
        }

        //// <summary>
        /// 对目标压缩文件解压缩,将内容解压缩到指定文件夹
        /// </summary>
        /// <param name="fileName">压缩文件</param>
        /// <param name="dirPath">解压缩目录</param>
        public static void DeCompress(string fileName, string dirPath)
        {
            using (Stream source = File.OpenRead(fileName))
            {
                using (Stream destination = new MemoryStream())
                {
                    using (GZipStream input = new GZipStream(source, CompressionMode.Decompress, true))
                    {
                        byte[] bytes = new byte[4096];
                        int n;
                        while ((n = input.Read(bytes, 0, bytes.Length)) != 0)
                        {
                            destination.Write(bytes, 0, n);
                        }
                    }
                    destination.Flush();
                    destination.Position = 0;
                    DeSerializeFiles(destination, dirPath);
                }
            }
        }

        private static void DeSerializeFiles(Stream s, string dirPath)
        {
            BinaryFormatter b = new BinaryFormatter();
            ArrayList list = (ArrayList)b.Deserialize(s);

            foreach (SerializeFileInfo f in list)
            {
                string newName = dirPath + Path.GetFileName(f.FileName);
                using (FileStream fs = new FileStream(newName, FileMode.Create, FileAccess.Write))
                {
                    fs.Write(f.FileBuffer, 0, f.FileBuffer.Length);
                    fs.Close();
                }
            }
        }

        private static void CreateCompressFile(Stream source, string destinationName)
        {
            using (Stream destination = new FileStream(destinationName, FileMode.Create, FileAccess.Write))
            {
                using (GZipStream output = new GZipStream(destination, CompressionMode.Compress))
                {
                    byte[] bytes = new byte[4096];
                    int n;
                    while ((n = source.Read(bytes, 0, bytes.Length)) != 0)
                    {
                        output.Write(bytes, 0, n);
                    }
                }
            }
        }

        [Serializable]
        class SerializeFileInfo
        {
            public SerializeFileInfo(string name, byte[] buffer)
            {
                fileName = name;
                fileBuffer = buffer;
            }

            string fileName;
            public string FileName
            {
                get
                {
                    return fileName;
                }
            }

            byte[] fileBuffer;
            public byte[] FileBuffer
            {
                get
                {
                    return fileBuffer;
                }
            }
        }
    }

 

分享到:
评论

相关推荐

    delphi字符串压缩

    在IT行业中,字符串压缩是一种常见的优化技术,尤其是在Delphi编程环境下。Delphi是Pascal语言的一个强大版本,它提供了...在进行字符串压缩时,应考虑压缩算法的性能、压缩比以及解压缩的复杂性,以确保最佳的平衡点。

    字符串解压缩

    在实际应用中,字符串解压缩广泛应用于数据传输、文件存储、网络通信等领域,因为它能有效地减小数据的体积,提高传输效率和存储空间利用率。在编程中,我们通常会使用现成的库函数或API,如Python的`zlib`模块,...

    字符串压缩解压缩.rar

    本篇文章将深入探讨ZLIB库在字符串压缩解压缩中的应用及其工作原理。 首先,我们要理解什么是字符串压缩。在计算机科学中,字符串通常包含大量重复的信息,如常见的字母、单词或模式。通过压缩技术,可以识别并替换...

    字符串压缩

    在实际应用中,字符串压缩可以用于优化文件存储、网络传输效率等方面。例如,在数据库存储中,压缩字符串可以减少存储空间;在网络传输中,压缩数据可以减少带宽消耗,提高传输速度。 标签中的“源码”意味着可能...

    字符串的压缩和解压

    根据给定文件的信息,本文将围绕“字符串的压缩与解压”这一主题展开,深入探讨字符串压缩和解压的基本原理、实现方法以及应用场景等多方面内容。 ### 字符串压缩和解压概述 字符串的压缩与解压是计算机科学中的一...

    字符串压缩与解压

    在IT领域,字符串压缩与解压是数据处理和存储中常见的技术。特别是在处理大量文本信息时,为了节省存储空间和提高传输效率,我们会对字符串进行压缩。本文将深入探讨C#语言中三种实现字符串压缩与解压的方法。 1. *...

    数据库课程设计—对带有大量重复单词的英文文本文件进行字符串压缩和解压缩处理

    这个设计项目的核心目标就是针对这样的文本文件进行有效的字符串压缩和解压缩操作,以节省存储空间并提高数据处理效率。在这个过程中,我们可以学习和应用多种计算机科学和信息技术中的关键概念。 首先,字符串压缩...

    Python123之字符串压缩#134865

    字符串压缩的主要目的是通过减少冗余信息来减小文件或数据的大小。它基于数据的统计特性,比如某些字符或模式出现的频率,将频繁出现的元素用更短的编码表示。常见的压缩方法有哈夫曼编码(Huffman Coding)、LZ77...

    quicklz cocos2dx 压缩 字符串压缩

    字符串压缩在游戏开发中非常重要,因为它可以减少数据存储和传输的大小,从而提高应用性能。 QuickLZ提供了两种主要的压缩级别:level 1和level 5,其中level 1设计用于快速压缩,而level 5则提供更高的压缩比。在...

    C#中ICSharpCode.SharpZipLib字符串压缩

    对于字符串压缩,SharpZipLib提供了`GZipStream`和`DeflaterStream`类,分别用于GZip和ZIP格式的压缩。这里我们以GZip为例,演示如何压缩和解压缩字符串: ```csharp public static string CompressString(string ...

    Delphi解压gzip字符串例程

    以下是使用Delphi和ZLib库进行gzip字符串压缩和解压的详细步骤: 1. **压缩gzip字符串**: - 首先,你需要将`ZLib`库导入到Delphi项目中。这通常涉及到将`DelphiZLib.123`这样的库文件添加到你的项目路径中,并...

    python字符串压缩.pdf

    - Python中的字符串压缩常用于数据存储(例如数据库记录)、文件传输、网络通信等场景,以减少存储空间和传输时间。 综上所述,Python提供了丰富的字符串压缩工具,开发者可以根据实际需求选择合适的方法。了解...

    C#自定义字符串压缩和解压缩的方法

    本文将介绍如何自定义一个简单的字符串压缩和解压缩的方法,使用.NET框架内置的`System.IO.Compression.GZipStream`类。 首先,让我们分析`ZipLib`类中的`Zip`方法。这个方法接收一个字符串`value`作为输入,其目的...

    赫夫曼压缩与解压缩

    6. **数据存储与读取**:在实际应用中,赫夫曼树本身不会被存储在压缩文件中,而是通过存储每个字符的频率和一个编码起点来实现。在解压缩时,可以根据这些信息重建赫夫曼树。 7. **优化与性能**:为了提高效率,...

    Android 加密压缩解密解压缩字符串简单DEMO

    例如,使用`Cipher`类进行加密解密,`GZIPOutputStream`和`GZIPInputStream`进行压缩解压缩。 7. **注意事项**: - 加密密钥管理:密钥的安全存储至关重要,避免硬编码在代码中。 - 性能优化:加密和压缩都需要...

    java算法,实现压缩及解压缩

    ### Java算法:实现压缩及解压缩 #### 一、压缩功能实现 在Java中实现文件压缩功能主要依赖于`java.util.zip`包中的类。以下是对压缩代码的详细解析: ##### 1. 导入所需类库 ```java import java.io....

    C# 压缩文件与字符串.rar_.net

    **字符串压缩与解压缩:** 除了处理文件,我们还可以使用.NET框架对字符串进行压缩和解压缩。这通常涉及使用GZipStream或DeflateStream,它们提供了数据的压缩和解压缩功能。以下是一个用GZipStream压缩和解压缩字符...

    解压Zip字符串(Delphi)

    gZip不仅用于文件压缩,还可以用于对字符串进行压缩。它通过查找字符串中的重复模式并用更短的编码替换这些模式,从而达到压缩的效果。gZip压缩后的数据通常带有文件头和尾部信息,以便于识别和解压。 接下来,我们...

Global site tag (gtag.js) - Google Analytics