zoukankan      html  css  js  c++  java
  • 对文件和字符串压缩及解压缩类

        /// <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;
                    }
                }
            }


        }


  • 相关阅读:
    HDU 4462 DFS
    HorizontalScrollView的使用演示样例
    编程之美读书笔记1.1——让CPU占用率曲线听你的指挥
    flume 日志导入elasticsearch
    2、COCOS2D-X内存管理机制
    cocos2d js ScrollView的使用方法
    程序中涉及到时间的相关问题
    【转】Android的onCreateOptionsMenu()创建菜单Menu详解
    【转】Android 菜单(OptionMenu)大全 建立你自己的菜单--不错
    【转】onPrepareOptionsMenu 和onCreateOptionsMenu 的区别
  • 原文地址:https://www.cnblogs.com/chenqingwei/p/1777806.html
Copyright © 2011-2022 走看看