GZipStream让我的文字比原版更大

时间:2016-11-10 16:45:13

标签: c# string compression

此处Compress and decompress string in c#有一篇帖子用于压缩c#中的字符串。

我为自己实现了相同的代码,但返回的文本几乎是我的两倍:O

我已经在尺寸 87 的json上尝试过这样的事情:

  

{ “G”: “82f88ff5-4143-46ef-86cc-a19910f4a6b5”, “U”: “df39e3c7-ffd3-4829-a9cd-27bfcbd4403a”}

结果是 168

  

H4sIAAAAAAAEAC2NUQ6DIBQE5yx8l0QFqfQCnqAHqKCXaHr3jsaQ3TyYfcuXwKpeamHi0Bf9YCaSGVW6psLua5QWmifykVbPyCDJ3gube4GHet + tXZZM7Xrj6d7Z3u / W8896dVVpd5rMbCaa3k1k25M88OMPcjDew64AAAA =

我已将Unicode更改为ASCII但结果仍然太大(128)

  

H4sIAAAAAAAEAA3KyxGAMAgFwF44y0w + JAEbsAILICSvCcfedc / 70EUnaYEq0FiyVJa + wdoj2LNZThDvs9FB918Xqu0ag4H1Vy3GbrG4jImYSyRVp / cDp8EZE1cAAAA =

public static string Compress(this string s)
{
    var bytes = Encoding.ASCII.GetBytes(s);
    using (var msi = new MemoryStream(bytes))
    using (var mso = new MemoryStream())
    {
        using (var gs = new GZipStream(mso, CompressionMode.Compress))
        {
           msi.CopyTo(gs);

        }
        return Convert.ToBase64String(mso.ToArray());
    }
}

1 个答案:

答案 0 :(得分:1)

Gzip不仅是压缩而是完整的文件格式 - 这意味着它增加了额外的结构,通常可以忽略它们的大小。 但是,如果压缩小字符串,它们会炸掉整个gzip流。

例如,标准GZIP标头有10个字节,它的页脚长度为8个字节。

因此,您现在以原始格式(而不是膨胀的base64编码的格式)获取gzip压缩结果,您将看到它有95个字节。

因此,标题和警报器的18个字节已占据输出的近20%!