GZip压缩相关的方法

2017-01-26 17:15:10  访问(1353) 赞(0) 踩(0)


            /// <summary>
            /// 获得gb2312的编码
            /// </summary>
            /// <returns></returns>
            public static System.Text.Encoding EncodingGetGB2312()
            {
                return System.Text.Encoding.GetEncoding("gb2312");
            }


            /// <summary>
            /// 获得MD5值
            /// </summary>
            /// <param name="s"></param>
            /// <param name="en"></param>
            /// <returns></returns>
            public static string GetMD5
                (
                    string s,
                    System.Text.Encoding en
                )
            {
                if (s == null)
                    s = "";

                MD5 md5 = new MD5CryptoServiceProvider();

                byte[] t = md5.ComputeHash
                    (
                        en.GetBytes(s)
                    );

                StringBuilder sb = new StringBuilder(32);

                for (int i = 0; i < t.Length; i++)
                {
                    sb.Append(t[i].ToString("x").PadLeft(2, '0'));
                }

                return sb.ToString();
            }


            /// <summary>
            /// DataSet结构的XML字符串转回成DataSet
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static DataSet StringToDataSet(string str)
            {
                DataSet ds = new DataSet();

                using (StringReader xmlSR = new StringReader(str))
                {

                    // 忽视任何内联架构,从数据推断出强类型架构并加载数据。如果无法推断,则解释成字符串数据
                    ds.ReadXml(xmlSR, XmlReadMode.InferTypedSchema);


                    if (ds.Tables.Count > 0)
                        return ds;
                    else
                        return null;
                }
            }



            /// <summary>
            /// 将传入字符串以GZip算法压缩后,返回Base64编码字符(默认用utf8编码)
            /// </summary>
            /// <param name="rawString">需要压缩的字符串</param>
            /// <returns>压缩后的Base64编码的字符串</returns>
            public static string GZipCompressString(string rawString)
            {
                if (rawString == null || rawString.Length == 0)
                    return "";

                System.Text.Encoding en
                    =
                    System.Text.Encoding.UTF8;

                byte[] rawData = en.GetBytes(rawString);
                byte[] zippedData = Compress(rawData);
                return Convert.ToBase64String(zippedData);

            }

            /// <summary>
            /// 将传入字符串以GZip算法压缩后,返回Base64编码字符
            /// </summary>
            /// <param name="rawString">需要压缩的字符串</param>
            /// <param name="en"></param>
            /// <returns>压缩后的Base64编码的字符串</returns>
            public static string GZipCompressString
                (
                    string rawString,
                    System.Text.Encoding en
                )
            {
                if (rawString == null || rawString.Length == 0)
                    return "";

                byte[] rawData = en.GetBytes(rawString);
                byte[] zippedData = Compress(rawData);
                return Convert.ToBase64String(zippedData);
            }



            /// <summary>
            /// GZip压缩
            /// </summary>
            /// <param name="rawData"></param>
            /// <returns></returns>
            private static byte[] Compress(byte[] rawData)
            {
                byte[] theResult = null;

                MemoryStream ms = null;
                GZipStream compressedzipStream = null;
                try
                {
                    ms = new MemoryStream();
                    compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true);
                    compressedzipStream.Write(rawData, 0, rawData.Length);

                    compressedzipStream.Flush();
                    compressedzipStream.Close();

                    ms.Flush();
                    theResult = ms.ToArray();
                }
                catch (Exception err)
                {
                    throw err;
                }
                finally
                {
                    if (compressedzipStream != null)
                    {
                        compressedzipStream.Close();
                        compressedzipStream.Dispose();
                        compressedzipStream = null;
                    }

                    if (ms != null)
                    {
                        ms.Close();
                        ms.Dispose();
                        ms = null;
                    }
                }

                return theResult;
            }

            /// <summary>
            /// 将传入的二进制字符串资料以GZip算法解压缩
            /// </summary>
            /// <param name="zippedString">经GZip压缩后的二进制字符串</param>
            /// <returns>原始未压缩字符串</returns>
            public static string GZipDecompressString
                (
                    string zippedString
                )
            {
                if (string.IsNullOrEmpty(zippedString) || zippedString.Length == 0)
                {
                    return "";
                }

                System.Text.Encoding en
                    =
                    System.Text.Encoding.UTF8;

                byte[] zippedData = Convert.FromBase64String(zippedString);
                return en.GetString(Decompress(zippedData));

            }

            /// <summary>
            /// 将传入的二进制字符串资料以GZip算法解压缩
            /// </summary>
            /// <param name="zippedString">经GZip压缩后的二进制字符串</param>
            /// <returns>原始未压缩字符串</returns>
            public static string GZipDecompressString
                (
                    string zippedString,
                    System.Text.Encoding en
                )
            {
                if (zippedString == null || zippedString.Length == 0)
                    return "";


                byte[] zippedData = Convert.FromBase64String(zippedString.ToString());
                return en.GetString(Decompress(zippedData));

            }



            /// <summary>
            /// ZIP解压
            /// </summary>
            /// <param name="zippedData"></param>
            /// <returns></returns>
            private static byte[] Decompress(byte[] zippedData)
            {
                byte[] theResult = null;
                MemoryStream ms = null;
                GZipStream compressedzipStream = null;
                MemoryStream outBuffer = null;
                try
                {
                    ms = new MemoryStream(zippedData);
                    compressedzipStream = new GZipStream(ms, CompressionMode.Decompress);

                    outBuffer = new MemoryStream();
                    byte[] block = new byte[1024];
                    while (true)
                    {
                        int bytesRead = compressedzipStream.Read(block, 0, block.Length);
                        if (bytesRead <= 0)
                            break;
                        else
                            outBuffer.Write(block, 0, bytesRead);
                    }

                    ms.Flush();
                    compressedzipStream.Flush();
                    outBuffer.Flush();

                    theResult = outBuffer.ToArray();

                }
                catch (Exception err)
                {
                    throw err;
                }
                finally
                {
                    if (compressedzipStream != null)
                    {
                        compressedzipStream.Flush();
                        compressedzipStream.Close();
                        compressedzipStream.Dispose();
                        compressedzipStream = null;
                    }

                    if (ms != null)
                    {
                        ms.Flush();
                        ms.Close();
                        ms.Dispose();
                        ms = null;
                    }

                    if (outBuffer != null)
                    {

                        outBuffer.Close();
                        outBuffer.Dispose();
                        outBuffer = null;
                    }
                }

                return theResult;
            }


标签:GZip压缩相关的方法 

上一条:

下一条:


 

相关评论

评论加载中……
 

发表评论

类型:
内容:
  (Alt+Enter)
 
  ┈全部┈  
 
(显示默认分类)