查看: 390|回复: 0

[.NET源码] C#实现压缩和解压缩的方法示例【Gzip和Zip方式】

发表于 2018-2-8 08:00:02

本文实例讲述了C#实现压缩和解压缩的方法。分享给大家供大家参考,具体如下:

使用ICSharpCode.SharpZipLib.dll来压缩/解压(压缩效率比GZip要高一点)

  1. public static class ZipUtil
  2. {
  3. /// <summary>
  4. /// 压缩
  5. /// </summary>
  6. /// <param name="param"></param>
  7. /// <returns></returns>
  8. public static string Compress(string param)
  9. {
  10. byte[] data = System.Text.Encoding.UTF8.GetBytes(param);
  11. //byte[] data = Convert.FromBase64String(param);
  12. MemoryStream ms = new MemoryStream();
  13. Stream stream = new ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream(ms);
  14. try
  15. {
  16. stream.Write(data, 0, data.Length);
  17. }
  18. finally
  19. {
  20. stream.Close();
  21. ms.Close();
  22. }
  23. return Convert.ToBase64String(ms.ToArray());
  24. }
  25. /// <summary>
  26. /// 解压
  27. /// </summary>
  28. /// <param name="param"></param>
  29. /// <returns></returns>
  30. public static string Decompress(string param)
  31. {
  32. string commonString = "";
  33. byte[] buffer = Convert.FromBase64String(param);
  34. MemoryStream ms = new MemoryStream(buffer);
  35. Stream sm = new ICSharpCode.SharpZipLib.BZip2.BZip2InputStream(ms);
  36. //这里要指明要读入的格式,要不就有乱码
  37. StreamReader reader = new StreamReader(sm, System.Text.Encoding.UTF8);
  38. try
  39. {
  40. commonString = reader.ReadToEnd();
  41. }
  42. finally
  43. {
  44. sm.Close();
  45. ms.Close();
  46. }
  47. return commonString;
  48. }
  49. }
复制代码

使用GZip来压缩/解压缩(字符串)

  1. public static class GZipUtil
  2. {
  3. public static string Zip(string value)
  4. {
  5. //Transform string into byte[]
  6. byte[] byteArray = new byte[value.Length];
  7. int indexBA = 0;
  8. foreach (char item in value.ToCharArray())
  9. {
  10. byteArray[indexBA++] = (byte)item;
  11. }
  12. //Prepare for compress
  13. System.IO.MemoryStream ms = new System.IO.MemoryStream();
  14. System.IO.Compression.GZipStream sw = new System.IO.Compression.GZipStream(ms,
  15. System.IO.Compression.CompressionMode.Compress);
  16. //Compress
  17. sw.Write(byteArray, 0, byteArray.Length);
  18. //Close, DO NOT FLUSH cause bytes will go missing...
  19. sw.Close();
  20. //Transform byte[] zip data to string
  21. byteArray = ms.ToArray();
  22. System.Text.StringBuilder sB = new System.Text.StringBuilder(byteArray.Length);
  23. foreach (byte item in byteArray)
  24. {
  25. sB.Append((char)item);
  26. }
  27. ms.Close();
  28. sw.Dispose();
  29. ms.Dispose();
  30. return sB.ToString();
  31. }
  32. public static string UnZip(string value)
  33. {
  34. //Transform string into byte[]
  35. byte[] byteArray = new byte[value.Length];
  36. int indexBA = 0;
  37. foreach (char item in value.ToCharArray())
  38. {
  39. byteArray[indexBA++] = (byte)item;
  40. }
  41. //Prepare for decompress
  42. System.IO.MemoryStream ms = new System.IO.MemoryStream(byteArray);
  43. System.IO.Compression.GZipStream sr = new System.IO.Compression.GZipStream(ms,
  44. System.IO.Compression.CompressionMode.Decompress);
  45. //Reset variable to collect uncompressed result
  46. byteArray = new byte[byteArray.Length];
  47. //Decompress
  48. int rByte = sr.Read(byteArray, 0, byteArray.Length);
  49. //Transform byte[] unzip data to string
  50. System.Text.StringBuilder sB = new System.Text.StringBuilder(rByte);
  51. //Read the number of bytes GZipStream red and do not a for each bytes in
  52. //resultByteArray;
  53. for (int i = 0; i < rByte; i++)
  54. {
  55. sB.Append((char)byteArray[i]);
  56. }
  57. sr.Close();
  58. ms.Close();
  59. sr.Dispose();
  60. ms.Dispose();
  61. return sB.ToString();
  62. }
  63. }
复制代码

更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》

希望本文所述对大家C#程序设计有所帮助。

您可能感兴趣的文章:

  • c#调用winrar解压缩文件代码分享
  • C#实现GZip压缩和解压缩入门实例
  • asp.net C#实现解压缩文件的方法
  • C#实现的文件压缩和解压缩类
  • C#自定义字符串压缩和解压缩的方法
  • C#使用DeflateStream解压缩数据文件的方法
  • C#使用GZipStream解压缩数据文件的方法
  • C#文件流进行压缩和解压缩的方法
  • C#实现rar压缩与解压缩文件的方法
  • C#中使用WinRAR实现加密压缩及解压缩文件
  • C# 利用ICSharpCode.SharpZipLib实现在线压缩和解压缩
  • Windows系统中C#调用WinRAR来压缩和解压缩文件的方法
  • C#使用WinRar命令进行压缩和解压缩操作的实现方法


回复

使用道具 举报