gpt4 book ai didi

c# - StreamReader ReadToEnd() 在第一次尝试时返回空字符串

转载 作者:可可西里 更新时间:2023-11-01 08:10:27 27 4
gpt4 key购买 nike

我知道之前在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com