我有办法

private static String DecompressAndDecode(byte[] data)
{
   GZipStream decompressor = new GZipStream(new MemoryStream(data), CompressionMode.Decompress);
   StreamReader decompressed = new StreamReader(decompressor, Encoding.UTF8);
   String result = decompressed.ReadToEnd();
   return result;
}


我有一些GZipped文本作为输入,结果应该是此文本的String表示形式。问题在于该方法返回一个空字符串。让我感到困惑的是,当我在调试模式下通过方法并到达return语句时,结果变量是一个空字符串,但是如果我创建了decompressed.ReadToEnd()表达式的监视程序,它将返回文本。我现在期望的是结果变量包含文本和评估为空字符串的decompressed.ReadToEnd()表达式。 (重新评估decompressed.ReadToEnd()表达式将按预期返回空字符串)。

@Edit:在我的情况下,我发现ReadToEnd()返回第二个调用的文本,并在第一个调用和第二个调用之后返回空字符串。

我在这里一定缺少一些明显的东西。

最佳答案

我认为您的问题是指针在蒸汽中的位置。每次执行ReadToEnd后,指针都设置在末尾,这就是为什么您可以第一次观看它。

ReadToEnd之前运行以下代码,将指针设置为开头。
someStream.Seek(0, SeekOrigin.Begin)

关于.net - StreamReader.ReadToEnd()返回一个空字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2572963/

10-10 19:27