我有一个类,它包装了一个 Stream 实例,所以我可以用它来包装 FileStreams 和 NetworkStreams。现在,我想测试流是否仍在传输任何数据,换句话说,我想测试 NetworkStream 是否仍然连接,或者 FileStream 是否到达终点。
是否有任何函数的返回值可以用来确定下一个 Stream.Read() 是否会导致异常?
提前致谢。
我有一个类,它包装了一个 Stream 实例,所以我可以用它来包装 FileStreams 和 NetworkStreams。现在,我想测试流是否仍在传输任何数据,换句话说,我想测试 NetworkStream 是否仍然连接,或者 FileStream 是否到达终点。
是否有任何函数的返回值可以用来确定下一个 Stream.Read() 是否会导致异常?
提前致谢。
Stream.Read
最后不应该抛出异常;它返回一些非积极的东西。我只是 Read(...) 直到我得到这个 - 即
int read;
while((read = stream.Read(buffer, 0, buffer.Length) > 0) {
// process "read"-many bytes
}
请注意,NetworkStream
有一个DataAvailable
- 但这指的是缓冲区,而不是流本身(如这里所讨论的)。我只提到这一点,因此您不要尝试使用它来查看流是否已关闭,因为这不是它的意思。
如果您将您的包装Stream
在 a 中StreamReader
,那么您可以使用Peek
orEndOfStream
来测试关闭:
bool isEnd = reader.EndOfStream;
或者:
int b = reader.Peek();
if(b < 0) {... was end ...}
stream.CanRead
当对方关闭套接字时,NetworkStream 将返回 EOF(读取将返回 0 字节)。