在 C# 中使用 SharpZipLib 时,为什么压缩后字符串的 GZip 压缩大小大于原始大小

问题描述

我的字符串是一个 Json 文件 (test.json),内容如下

{
  "objectId": "bbad4cc8-bce8-438e-8683-3e603d746dee","timestamp": "2021-04-28T14:02:42.247Z","variable": "temperatureArray","model": "abc.abcdefg.abcdef","quality": 5,"value": [ 43.471600438222104,10.00940101687303,39.925500606152,32.34369812176735,33.07786476010357 ]
}

我压缩如下

using ICSharpCode.SharpZipLib.GZip;
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Text;

namespace GZipTest
{
    public static class SharpZipLibCompression
    {
        public static void Test()
        {
            Trace.WriteLine("****************SharpZipLib Test*****************************");
            var testFile = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),"test.json");
            var text = File.ReadAllText(testFile);
            var ipStringSize = System.Text.UTF8Encoding.Unicode.GetByteCount(text);
            var compressedString = CompressString(text);
            var opStringSize = System.Text.UTF8Encoding.Unicode.GetByteCount(compressedString);
            float stringCompressionRatio = (float)opStringSize / ipStringSize;
            Trace.WriteLine("String Compression Ratio using SharpZipLib" + stringCompressionRatio);
        }

        public static string CompressString(string text)
        {
            if (string.IsNullOrEmpty(text))
                return null;
            byte[] buffer = Encoding.UTF8.GetBytes(text);
            using (var compressedStream = new MemoryStream())
            {
                GZip.Compress(new MemoryStream(buffer),compressedStream,false);
                byte[] compressedData = compressedStream.ToArray();
                return Convert.ToBase64String(compressedData);
            }
        }
    }
}

但我的压缩字符串大小 (opStringSize) 大于原始字符串大小 (ipStringSize)。为什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)