GZip.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using ICSharpCode.SharpZipLib;
  7. using ICSharpCode.SharpZipLib.GZip;
  8. /// <summary>
  9. /// GZIP相关工具集
  10. /// </summary>
  11. public partial class Utils
  12. {
  13. /// <summary>
  14. /// GZIP压缩
  15. /// </summary>
  16. /// <param name="content">压缩字符串</param>
  17. /// <returns>压缩后字符串</returns>
  18. public static string GZipEncode(string content)
  19. {
  20. return Bytes2Str(GZipEncode(Str2Bytes(content)));
  21. }
  22. /// <summary>
  23. /// GZIP压缩
  24. /// </summary>
  25. /// <param name="bytes">压缩字节流</param>
  26. /// <returns>压缩后的字节流</returns>
  27. public static byte[] GZipEncode(byte[] bytes)
  28. {
  29. MemoryStream ms = new MemoryStream();
  30. GZipOutputStream gz = new GZipOutputStream(ms);
  31. gz.Write(bytes, 0, bytes.Length);
  32. gz.Close();
  33. byte[] ret = ms.ToArray();
  34. ms.Close();
  35. return ret;
  36. }
  37. /// <summary>
  38. /// GZIP解压缩
  39. /// </summary>
  40. /// <param name="content">已压缩字符串</param>
  41. /// <returns>解压缩后字符串</returns>
  42. public static string GZipDecode(string content)
  43. {
  44. return Bytes2Str(GZipDecode(Str2Bytes(content)));
  45. }
  46. /// <summary>
  47. /// GZIP解压缩
  48. /// </summary>
  49. /// <param name="bytes">已压缩字节流</param>
  50. /// <returns>解压缩后字节流</returns>
  51. public static byte[] GZipDecode(byte[] bytes)
  52. {
  53. MemoryStream des = new MemoryStream();
  54. MemoryStream ms = new MemoryStream(bytes);
  55. GZipInputStream gz = new GZipInputStream(ms);
  56. int count = 0;
  57. int offset = 0;
  58. byte[] buf = new byte[1024 * 1024];
  59. do
  60. {
  61. count = gz.Read(buf, 0, buf.Length);
  62. des.Write(buf, 0, count);
  63. offset += count;
  64. } while (count > 0);
  65. gz.Close();
  66. byte[] ret = des.ToArray();
  67. ms.Close();
  68. return ret;
  69. }
  70. }