我有一个非常简单的 gzip 方法:
public byte[] Compress(string input)
{
var bytes = Encoding.UTF8.GetBytes(input);
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
using (var gz = new GZipStream(mso, CompressionMode.Compress))
{
msi.CopyTo(gz);
return mso.ToArray();
}
}
但是,单元测试失败了。即使传入一个简单的短字符串也无法正确压缩。例如"this is a test"
变成一个包含 10 个元素的字节数组:[31,139,8,0,0,0,0,0,4,0]
当然没有正确解压缩。这里出了什么问题?这直接来自 msdn!
最佳答案
您需要刷新 关闭流以进行压缩。在您调用 mso.ToArray()
时,GZipStream
尚未压缩任何内容,正在等待更多数据。
一个简单的解决方案:
public byte[] Compress(string input)
{
var bytes = Encoding.UTF8.GetBytes(input);
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream())
{
using (var gz = new GZipStream(mso, CompressionMode.Compress))
{
msi.CopyTo(gz);
}
return mso.ToArray();
}
}
关于c# - Gzipped 内容不反射(reflect)输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41763738/