所以这里有一个奇怪的。我有这种方法来获取 Base64 编码的压缩字符串并返回原始数据:
public static string Base64Decompress(string base64data)
{
byte[] b = Convert.FromBase64String(base64data);
using (var orig = new MemoryStream(b))
{
using (var inflate = new MemoryStream())
{
using (var ds = new DeflateStream(orig, CompressionMode.Decompress))
{
ds.CopyTo(inflate);
return Encoding.ASCII.GetString(inflate.ToArray());
}
}
}
}
这将返回一个空字符串,除非我添加第二次调用ds.CopyTo(inflate)
. (WTF?)
...
using (var ds = new DeflateStream(orig, CompressionMode.Decompress))
{
ds.CopyTo(inflate);
ds.CopyTo(inflate);
return Encoding.ASCII.GetString(inflate.ToArray());
}
...
( Flush
// on没有效果。Close
)Dispose
ds
为什么DeflateStream
在第一次调用时复制 0 个字节?我也试过用 循环Read()
,但它在第一次调用时也返回零,然后在第二次调用。
更新:这是我用来压缩数据的方法。
public static string Base64Compress(string data, Encoding enc)
{
using (var ms = new MemoryStream())
{
using (var ds = new DeflateStream(ms, CompressionMode.Compress))
{
byte[] b = enc.GetBytes(data);
ds.Write(b, 0, b.Length);
ds.Flush();
return Convert.ToBase64String(ms.ToArray());
}
}
}