2019-07-21 16:29

C# 用 gzip 壓縮字串並取得 base64 字串

這個使用方式的效果是有但書的,當 Source 的重複率不高壓縮的效果就不會好,再加上 base64 就是用可見文字去表示 byte 值,這會讓 base64 後的結果比 byte array 還要長,所以壓縮率沒有到達一定的程度下,輸出反而會比 Source 的字串還要長。

  1. //using System.IO.Compression; 
  2.  
  3.  
  4. void Main() 
  5. { 
  6.    string text = "OptionPostal,OptionClassType,OptionTalentItem"; 
  7.    text.Length.Dump(); /* 45 */ 
  8.  
  9.    string compressBase64 = compress(text); 
  10.    compressBase64.Length.Dump(); /* 76 */ 
  11.    compressBase64.Dump();  
  12.    /* H4sIAAAAAAAEAPMvKMnMzwvILy5JzNHxB3OccxKLi0MqC1Kh/JDEnNS8Es+S1FwAaY6qVC0AAAA= */ 
  13.  
  14.    string decompressText = decompress(compressBase64); 
  15.    decompressText.Dump();  
  16.    /* OptionPostal,OptionClassType,OptionTalentItem */ 
  17.  
  18.    text = "OptionPostal,OptionClassType,OptionTalentItem,OptionPostal,OptionClassType,OptionTalentItem,OptionPostal,OptionClassType,OptionTalentItem,OptionPostal,OptionClassType,OptionTalentItem"; 
  19.    text.Length.Dump(); /* 183 */ 
  20.  
  21.    compressBase64 = compress(text); 
  22.    compressBase64.Length.Dump(); /* 84 */ 
  23.    compressBase64.Dump();  
  24.    /* H4sIAAAAAAAEAPMvKMnMzwvILy5JzNHxB3OccxKLi0MqC1Kh/JDEnNS8Es+S1FyowCBQDQBPmlWktwAAAA== */ 
  25.  
  26. } 
  27.  
  28.  
  29. /*壓縮*/ 
  30. private static string compress(string text) 
  31. { 
  32.    if (string.IsNullOrEmpty(text)) { return text; } 
  33.  
  34.    byte[] buffer = Encoding.UTF8.GetBytes(text); 
  35.  
  36.    using (var outStream = new MemoryStream()) 
  37.    using (var zip = new GZipStream(outStream, CompressionMode.Compress)) 
  38.    { 
  39.        zip.Write(buffer, 0, buffer.Length); 
  40.        zip.Close(); 
  41.  
  42.        string compressedBase64 = Convert.ToBase64String(outStream.ToArray()); 
  43.        return compressedBase64; 
  44.    } 
  45. } 
  46.  
  47.  
  48. /*解壓縮*/ 
  49. private static string decompress(string compressed) 
  50. { 
  51.    if (string.IsNullOrEmpty(compressed)) { return compressed; } 
  52.  
  53.    byte[] buffer = Convert.FromBase64String(compressed); 
  54.  
  55.    using (var inStream = new MemoryStream(buffer)) 
  56.    using (var outStream = new MemoryStream()) 
  57.    using (var zip = new GZipStream(inStream, CompressionMode.Decompress)) 
  58.    { 
  59.        zip.CopyTo(outStream); 
  60.        zip.Close(); 
  61.  
  62.        string text = Encoding.UTF8.GetString(outStream.ToArray()); 
  63.        return text; 
  64.    } 
  65. } 

0 回應: