我知道之前在 Stackoverflow 上有人问过这个问题,但找不到解释。
当我尝试从压缩字节数组中读取字符串时,我在第一次尝试时得到了一个空字符串,在第二次我成功并获得了字符串。
代码示例:
public static string Decompress(byte[] gzBuffer)
{
if (gzBuffer == null)
return null;
using (var ms = new MemoryStream(gzBuffer))
{
using (var decompress = new GZipStream(ms, CompressionMode.Decompress))
{
using (var sr = new StreamReader(decompress, Encoding.UTF8))
{
string ret = sr.ReadToEnd();
// this is the extra check that is needed !?
if (ret == "")
ret = sr.ReadToEnd();
return ret;
}
}
}
}
感谢所有建议。 - 维克多·卡塞尔
最佳答案
我发现了错误。正如迈克尔在压缩例程中所建议的那样。我错过了在 GZipStream 上调用 Close()。
public static byte[] Compress(string text)
{
if (string.IsNullOrEmpty(text))
return null;
byte[] raw = Encoding.UTF8.GetBytes(text);
using (var ms = new MemoryStream())
{
using (var compress = new GZipStream (ms, CompressionMode.Compress))
{
compress.Write(raw, 0, raw.Length);
compress.Close();
return ms.ToArray();
}
}
}
发生的事情是,数据似乎以错误的状态保存,之后需要在解压缩例程中两次调用 ReadToEnd() 才能提取相同的数据。很奇怪!
关于c# - StreamReader ReadToEnd() 在第一次尝试时返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4461445/