我正在尝试压缩我的UWP应用程序中的一些文本。我创建这个方法是为了以后更容易:
public static byte[] Compress(this string s)
{
var b = Encoding.UTF8.GetBytes(s);
using (MemoryStream ms = new MemoryStream())
using (GZipStream zipStream = new GZipStream(ms, CompressionMode.Compress))
{
zipStream.Write(b, 0, b.Length);
zipStream.Flush(); //Doesn't seem like Close() is available in UWP, so I changed it to Flush(). Is this the problem?
return ms.ToArray();
}
}
但是不幸的是,不管输入文本是什么,这总是返回10个字节。是因为我没有在.Close()
上使用GZipStream
发布于 2016-10-20 08:50:09
您正在过早地返回字节数据。Close()方法被Dispose()方法替换。因此,只有在释放GZIP流时才会写入GZIP流,所以在之后,您将离开using(GZipStream) {}
块。
public static byte[] Compress(string s)
{
var b = Encoding.UTF8.GetBytes(s);
var ms = new MemoryStream();
using (GZipStream zipStream = new GZipStream(ms, CompressionMode.Compress))
{
zipStream.Write(b, 0, b.Length);
zipStream.Flush(); //Doesn't seem like Close() is available in UWP, so I changed it to Flush(). Is this the problem?
}
// we create the data array here once the GZIP stream has been disposed
var data = ms.ToArray();
ms.Dispose();
return data;
}
https://stackoverflow.com/questions/40149163
复制相似问题