我对ReadTimeout
是如何使用的以及它如何影响read()感到困惑。
在尝试读取网络流时,假设我们尝试读取x个字节,则有3种情况:
数据可用,字节数据可用,字节=x
数据可用,字节>x
无可用数据,且ReadTimeout
>0
无可用数据,且ReadTimeout
=0
文档有点含糊不清,在调用ReadTimeout
时没有明确提及Read()
,或者ReadTimeout
是否影响Read()
调用。
此方法将数据读取到缓冲区参数中,并返回成功读取的字节数。如果没有可供读取的数据,则read方法返回0。读取操作读取尽可能多的可用数据,最多可达size参数指定的字节数。
我了解的是上述5种情况:Read()
将以x字节读取并立即返回。ReadTimeout
不重要Read()
将读取x字节并返回Read()
将读取x字节并返回。需要再次调用read来读取x字节的其余部分。
调用Read()
将等待数据的ReadTimeout
时间段。Read()
将立即返回0。
如果有人能澄清一下,我将不胜感激。
谢谢您。
最佳答案
如果您查看source for NetworkStream,您将看到场景1-4和理解是正确的(NetworkStream只是在套接字上调用read())。过期超时的重新获取是一个ioexception,内部socketexception指示超时。
场景5不适用:readTimeout不能为零,它可以是负1(-1,表示无限)或大于等于1。所以说是气味。5要么永远是块,要么得到一个IOException,其内部socketException指示一些错误。