[这是一条红鲱鱼-很抱歉浪费人们的时间。虽然这些信息可能对其他人有用。]
我有一个自定义内存流,我已经将 StreamReader 包裹起来,以便通过ReadToEnd()
. 问题是它永远不会结束。它不断地调用我的ReadByte()
函数,任何可以返回的值都可能是一个真正的值——所以与Read()
我可以返回零来指示数据结束的函数不同,我在这里卡住了。的规范ReadByte()
说它在数据末尾返回-1-但这不会导致ReadToEnd()
停止。如果是这样,那就太没用了。
我在文档中只能找到“ReadToEnd 假设流知道何时结束”。但我看不到流是如何发出这种情况的信号的。
如果ReadByte()
在到达流的末尾时抛出异常,则我分配输出的变量永远不会被设置,因为 StreamReader 没有捕获到异常。那么它从它下面的流中寻找什么条件来告诉它它已经到达流的末尾?
在所有评论和更多挖掘之后,问题原来是我忘记的中间流,其中read()
调用子流readbyte
并将返回的数据写入数组。感谢其中一条评论,当我发现我能够首先将 int 读入一个变量以检查它是否是 int -1 而不是 byte -1 来决定是继续写入数组还是退出因为没有更多的数据了。
所以我的问题的答案是信号是一个返回零的 Read(),如果你看到 ReadByte 在任何地方被调用,那么这就是开始怀疑的地方。