zoukankan      html  css  js  c++  java
  • CompressHelper

     public static string CompressString(string unCompressedString)
            {
                byte[] bytData = System.Text.Encoding.UTF8.GetBytes(unCompressedString);
                MemoryStream ms = new MemoryStream();
                using (Stream s = new GZipStream(ms, CompressionMode.Compress))
                {
                    s.Write(bytData, 0, bytData.Length);
                    s.Close();
                }
                byte[] compressedData = (byte[])ms.ToArray();
    
                return System.Convert.ToBase64String(compressedData, 0, compressedData.Length);
            }
    
            /// <summary>
            /// 解压字符串
            /// 
            /// </summary>
            /// <param name="unCompressedString"></param>
            /// <returns></returns>
            public static string DecompressString(string unCompressedString)
            {
                System.Text.StringBuilder uncompressedString = new System.Text.StringBuilder();
                byte[] writeData = new byte[4096];
    
                byte[] bytData = System.Convert.FromBase64String(unCompressedString);
                int totalLength = 0;
                int size = 0;
    
                using (Stream s = new GZipStream(new MemoryStream(bytData), CompressionMode.Decompress))
                {
                    while (true)
                    {
                        size = s.Read(writeData, 0, writeData.Length);
                        if (size > 0)
                        {
                            totalLength += size;
                            uncompressedString.Append(System.Text.Encoding.UTF8.GetString(writeData, 0, size));
                        }
                        else
                        {
                            break;
                        }
                    }
                    s.Close();
                }
                return uncompressedString.ToString();
            }
    
            /// <summary>
            /// 提供文件名称列表和压缩后保存的文件名称,对指定文件进行压缩
            /// </summary>
            /// <param name="fileName">需要压缩的文件列表</param>
            /// <param name="compressFileName">压缩后存放的文件名称</param>
            /// <returns></returns>
            public static bool CompressFiles(IList<string> fileName, string compressFileName)
            {
                bool result = false;
                try
                {
                    ArrayList fileList = new ArrayList();
    
                    List<byte[]> byteList = new List<byte[]>();
                    foreach (string item in fileName)
                    {
                        if (File.Exists(item))
                        {
                            CompressFileInfo fileInfo = new CompressFileInfo();
                            fileInfo.FileName = Path.GetFileName(item);
                            fileInfo.FileBuffer = File.ReadAllBytes(item);
                            fileList.Add(fileInfo);
                        }
                    }
    
                    IFormatter formatter = new BinaryFormatter();
                    using (Stream s = new MemoryStream())
                    {
                        formatter.Serialize(s, fileList);
                        s.Position = 0;
                        CreateCompressFiles(s, compressFileName);
                        result = true;
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
    
                return result;
            }
            /// <summary>
            /// 将指定的压缩文件进行解压,并输出到指定路径中
            /// </summary>
            /// <param name="fileName">需要解压的文件全名</param>
            /// <param name="outputPath">解压后文件存放路径</param>
            /// <returns></returns>
            public static bool DecompressFiles(string fileName, string outputPath)
            {
                bool result = false;
                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;
                        DeserializeFileInfo(destination, outputPath);
                        result = true;
    
                    }
                }
    
                return result;
            }
    
            /// <summary>
            /// 将需要压缩的文件流进行压缩,然后保存到指定的文件下
            /// </summary>
            /// <param name="sourceStream"></param>
            /// <param name="compressFileName"></param>
            private static void CreateCompressFiles(Stream sourceStream, string compressFileName)
            {
                using (Stream destination = new FileStream(compressFileName, FileMode.Create, FileAccess.Write))
                {
                    using (GZipStream output = new GZipStream(destination, CompressionMode.Compress))
                    {
                        byte[] bytes = new byte[4096];
                        int n;
                        while ((n = sourceStream.Read(bytes, 0, bytes.Length)) != 0)
                        {
                            output.Write(bytes, 0, n);
                            
                        }
                    }
                }
    
            }
    
            /// <summary>
            /// 反序列化文件描述对象
            /// </summary>
            /// <param name="sourceStream"></param>
            /// <param name="outputPath"></param>
            private static void DeserializeFileInfo(Stream sourceStream, string outputPath)
            {
                BinaryFormatter b = new BinaryFormatter();
                ArrayList list = (ArrayList)b.Deserialize(sourceStream);
    
                foreach (CompressFileInfo item in list)
                {
                    string newName =Path.Combine(outputPath , item.FileName);
                    using (FileStream fs = new FileStream(newName, FileMode.Create, FileAccess.Write))
                    {
                        fs.Write(item.FileBuffer, 0, item.FileBuffer.Length);
                        fs.Close();
                    }
                }
            }
    

      

  • 相关阅读:
    Findbugs初探-使用idea获取findbugs插件
    idea 14运行java工程报错-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.
    Linux定时任务
    模块和包
    流程控制&&函数
    Python 变量与数据类型
    使用代码上传文件示例
    好用的代码示例
    JedisCluster API 整理
    springboot实现转发和重定向
  • 原文地址:https://www.cnblogs.com/Wolfmanlq/p/4556726.html
Copyright © 2011-2022 走看看