zoukankan      html  css  js  c++  java
  • zip格式压缩、解压缩(C#)

    压缩方法

            #region 压缩
    
            /// <summary>
            /// 压缩
            /// </summary>
            /// <param name="bytes">未被压缩的字节数据</param>
            /// <returns></returns>
            public static byte[] Compress(byte[] bytes)
            {
                if (bytes == null)
                    return null;
    
                using (MemoryStream oStream = new MemoryStream())   //压缩
                {
                    GZipStream zipStream = new GZipStream(oStream, CompressionMode.Compress);
                    zipStream.Write(bytes, 0, bytes.Length);
                    zipStream.Flush();
                    zipStream.Close();
    
                    return oStream.ToArray();
                }
            }
    
            /// <summary>
            /// 压缩
            /// </summary>
            /// <param name="dataOriginal">未被压缩的数据</param>
            /// <returns></returns>
            public static byte[] Compress(object dataOriginal)
            {
                if (dataOriginal == null)
                    return null;
    
                byte[] bytes = null;
                using (MemoryStream mStream = new MemoryStream())     //序列化成二进制数组
                {
                    BinaryFormatter bFormatter = new BinaryFormatter();
                    bFormatter.Serialize(mStream, dataOriginal);
                    bytes = mStream.ToArray();
                }
    
                return Compress(bytes);
            }
    
            /// <summary>
            /// 压缩字符串
            /// </summary>
            /// <param name="unZipData">未被压缩的数据</param>
            /// <returns></returns>
            public static string Compress(string unZipData)
            {
                if (string.IsNullOrEmpty(unZipData))
                    return null;
                var bytes = Compress(unZipData as object);
                if (bytes == null)
                    return null;
    
                return Convert.ToBase64String(bytes);   //一定要Base64,否则会出错
            }
    
            #endregion
    View Code

    解压方法

            #region 解压缩
    
            /// <summary>
            /// 解压缩
            /// </summary>
            /// <param name="stream"></param>
            /// <returns></returns>
            public static object Decompress(Stream stream)
            {
                stream.Seek(0, SeekOrigin.Begin);
                GZipStream unZipStream = new GZipStream(stream, CompressionMode.Decompress, true);
                object dsResult = null;
                BinaryFormatter bFormatter = new BinaryFormatter();
                dsResult = bFormatter.Deserialize(unZipStream) as object;
                unZipStream.Close();
    
                return dsResult;
            }
    
            /// <summary>
            /// 解压缩
            /// </summary>
            /// <param name="bytes">压缩后的字节数组</param>
            /// <returns></returns>
            public static object Decompress(byte[] bytes)
            {
                if (bytes == null) 
                    return null;
                using (MemoryStream mStream = new MemoryStream(bytes))
                {
                    return Decompress(mStream);
                }
                
            }
    
            /// <summary>
            /// 解压缩字符串
            /// </summary>
            /// <param name="zipData">被压缩的字符串</param>
            /// <returns></returns>
            public static string Decompress(string zipData)
            {
                if (string.IsNullOrEmpty(zipData))
                    return null;
                var bytes = Convert.FromBase64String(zipData);   //一定要Base64,否则会出错
    
                return Decompress(bytes) as string;
            }
    
            #endregion
    View Code

    字符串压缩、解压缩 字节数组和字符串的相互装换要用Base64编码!

  • 相关阅读:
    CF896C Willem, Chtholly and Seniorious 珂朵莉树
    LG2495 「SDOI2011」消耗战 虚树
    20191102 「HZOJ NOIP2019 Round #12」20191102模拟
    LG1345 「USACO5.4」Telecowmunication 最小割
    LG1344 「USACO4.4」Pollutant Control 最小割
    POJ1741 Tree 点分治
    [BZOJ2143]飞飞侠 并查集优化最短路
    [NOI.AC#41]最短路 线性基
    [NOI.AC#40]Erlang
    [BZOJ2238]Mst 最小生成树+树链剖分/并查集
  • 原文地址:https://www.cnblogs.com/liujinwu-11/p/4341812.html
Copyright © 2011-2022 走看看