StreamReader.ReadToEnd()返回一个空字符串

axk*_*axk 10 .net stream

我有一个方法

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;
}
Run Code Online (Sandbox Code Playgroud)

我有一些GZipped文本作为输入,结果应该是这个文本的字符串表示.问题是该方法返回一个空字符串.让我感到困惑的是,当我在调试模式中执行该方法并到达return语句时,结果变量是一个空字符串但是如果我为decompressed.ReadToEnd()表达式创建一个监视器,它会返回文本.在这一点上我期望的是包含文本的结果变量和评估为空字符串的decompressed.ReadToEnd()表达式.(重新评估decompressed.ReadToEnd()表达式会返回一个空字符串,如预期的那样).

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

必须有一些明显我在这里失踪的东西.

小智 26

我认为你的问题是指针在蒸汽中的位置.每次执行之后ReadToEnd,指针都会设置为结束,这就是您第一次观看它的原因.

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

  • StreamReader 没有 Seek 成员函数。 (2认同)
  • @stackptr 你需要在你提供给你的 streamReader 的流上使用它 (2认同)
  • 你也可以只设置`someStream.Position = 0;` (2认同)