此处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());
}
}
答案 0 :(得分:1)
Gzip不仅是压缩而是完整的文件格式 - 这意味着它增加了额外的结构,通常可以忽略它们的大小。 但是,如果压缩小字符串,它们会炸掉整个gzip流。
例如,标准GZIP标头有10个字节,它的页脚长度为8个字节。
因此,您现在以原始格式(而不是膨胀的base64编码的格式)获取gzip压缩结果,您将看到它有95个字节。
因此,标题和警报器的18个字节已占据输出的近20%!