C#對GZIP壓縮和解壓


/// <summary>
/// 將Gzip的byte數組讀取為字符串
/// </summary>
/// <param name="bytes"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static string ReadGzip(byte[] bytes, string encoding = "GB2312")
{
    string result = string.Empty;
    using (MemoryStream ms = new MemoryStream(bytes))
    {
        using (GZipStream decompressedStream = new GZipStream(ms, CompressionMode.Decompress))
        {
            using (StreamReader sr = new StreamReader(decompressedStream, Encoding.GetEncoding(encoding)))
            {
                result = sr.ReadToEnd();
            }
        }
    }
    return result;
}

/// <summary>
/// 將字符串壓縮成Gzip格式的byte數組
/// </summary>
/// <param name="str"></param>
/// <param name="encoding"></param>
/// <returns></returns>
public static byte[] WriteGzip(string str, string encoding = "GB2312")
{
    byte[] rawData = System.Text.Encoding.UTF8.GetBytes(str);
    using (MemoryStream ms = new MemoryStream())
    {
        GZipStream compressedzipStream = new GZipStream(ms, CompressionMode.Compress, true);
        compressedzipStream.Write(rawData, 0, rawData.Length);
        compressedzipStream.Close();
        return ms.ToArray();
    }
}

/// <summary>
/// 解壓Gzip文件,返回字符串
/// </summary>
/// <param name="fileName">文件全路徑</param>
/// <returns>字符串</returns>
public static string ReadGzipFromFile(string fileName)
{
    using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
    {
        using (GZipStream decompressedStream = new GZipStream(fileStream, CompressionMode.Decompress))
        {
            StreamReader reader = new StreamReader(decompressedStream);
            string result = reader.ReadToEnd();//重點
            reader.Close();
            return result;
        }
    }
}

 

外面可以通過File.ReadAllBytes()和File.WriteAllBytes()進行文件的操作。而GZIP文件的后綴名為.gz

靈感來源:http://www.cnblogs.com/gengaixue/p/3300664.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM