- //using System.IO.Compression;
- void Main()
- {
- string text = "OptionPostal,OptionClassType,OptionTalentItem";
- text.Length.Dump(); /* 45 */
- string compressBase64 = compress(text);
- compressBase64.Length.Dump(); /* 76 */
- compressBase64.Dump();
- /* H4sIAAAAAAAEAPMvKMnMzwvILy5JzNHxB3OccxKLi0MqC1Kh/JDEnNS8Es+S1FwAaY6qVC0AAAA= */
- string decompressText = decompress(compressBase64);
- decompressText.Dump();
- /* OptionPostal,OptionClassType,OptionTalentItem */
- text = "OptionPostal,OptionClassType,OptionTalentItem,OptionPostal,OptionClassType,OptionTalentItem,OptionPostal,OptionClassType,OptionTalentItem,OptionPostal,OptionClassType,OptionTalentItem";
- text.Length.Dump(); /* 183 */
- compressBase64 = compress(text);
- compressBase64.Length.Dump(); /* 84 */
- compressBase64.Dump();
- /* H4sIAAAAAAAEAPMvKMnMzwvILy5JzNHxB3OccxKLi0MqC1Kh/JDEnNS8Es+S1FyowCBQDQBPmlWktwAAAA== */
- }
- /*壓縮*/
- private static string compress(string text)
- {
- if (string.IsNullOrEmpty(text)) { return text; }
- byte[] buffer = Encoding.UTF8.GetBytes(text);
- using (var outStream = new MemoryStream())
- using (var zip = new GZipStream(outStream, CompressionMode.Compress))
- {
- zip.Write(buffer, 0, buffer.Length);
- zip.Close();
- string compressedBase64 = Convert.ToBase64String(outStream.ToArray());
- return compressedBase64;
- }
- }
- /*解壓縮*/
- private static string decompress(string compressed)
- {
- if (string.IsNullOrEmpty(compressed)) { return compressed; }
- byte[] buffer = Convert.FromBase64String(compressed);
- using (var inStream = new MemoryStream(buffer))
- using (var outStream = new MemoryStream())
- using (var zip = new GZipStream(inStream, CompressionMode.Decompress))
- {
- zip.CopyTo(outStream);
- zip.Close();
- string text = Encoding.UTF8.GetString(outStream.ToArray());
- return text;
- }
- }
2019-07-21 16:29
C# 用 gzip 壓縮字串並取得 base64 字串
這個使用方式的效果是有但書的,當 Source 的重複率不高壓縮的效果就不會好,再加上 base64 就是用可見文字去表示 byte 值,這會讓 base64 後的結果比 byte array 還要長,所以壓縮率沒有到達一定的程度下,輸出反而會比 Source 的字串還要長。
訂閱:
張貼留言 (Atom)
0 回應:
張貼留言