2

我有一个类,它包装了一个 Stream 实例,所以我可以用它来包装 FileStreams 和 NetworkStreams。现在,我想测试流是否仍在传输任何数据,换句话说,我想测试 NetworkStream 是否仍然连接,或者 FileStream 是否到达终点。

是否有任何函数的返回值可以用来确定下一个 Stream.Read() 是否会导致异常?

提前致谢。

4

3 回答 3

3

Stream.Read最后不应该抛出异常;它返回一些非积极的东西。我只是 Read(...) 直到我得到这个 - 即

int read;
while((read = stream.Read(buffer, 0, buffer.Length) > 0) {
    // process "read"-many bytes
}

请注意,NetworkStream有一个DataAvailable- 但这指的是缓冲区,而不是流本身(如这里所讨论的)。我只提到这一点,因此您不要尝试使用它来查看流是否已关闭,因为这不是它的意思。

如果您将您的包装Stream在 a 中StreamReader,那么您可以使用PeekorEndOfStream来测试关闭:

bool isEnd = reader.EndOfStream;

或者:

int b = reader.Peek();
if(b < 0) {... was end ...}
于 2009-01-16T16:00:09.547 回答
0
stream.CanRead
于 2009-01-16T15:59:37.647 回答
0

当对方关闭套接字时,NetworkStream 将返回 EOF(读取将返回 0 字节)。

于 2012-11-05T15:02:01.157 回答