我对
在尝试读取网络流时,有三种情况,假设我们正在尝试读取X个字节:
1. 数据可用,并且字节数小于X。 2. 数据可用,并且字节数等于X。 3. 数据可用,并且字节数大于X。 4. 没有可用数据,并且
文档有点模糊,没有明确提及
这个方法将数据读入缓冲区参数并返回成功读取的字节数。如果没有可读数据,则Read方法返回0。Read操作读取尽可能多的数据,最多可以达到size参数指定的字节数。
我理解以上5种情况: 1.
如果有人能够给出一些澄清,我将不胜感激。
谢谢。
ReadTimeout
的使用方式和它如何影响Read()方法感到困惑。在尝试读取网络流时,有三种情况,假设我们正在尝试读取X个字节:
1. 数据可用,并且字节数小于X。 2. 数据可用,并且字节数等于X。 3. 数据可用,并且字节数大于X。 4. 没有可用数据,并且
ReadTimeout
> 0。
5. 没有可用数据,并且ReadTimeout
= 0。文档有点模糊,没有明确提及
Read()
调用中的ReadTimeout
,或者ReadTimeout
是否根本影响Read()
调用。这个方法将数据读入缓冲区参数并返回成功读取的字节数。如果没有可读数据,则Read方法返回0。Read操作读取尽可能多的数据,最多可以达到size参数指定的字节数。
我理解以上5种情况: 1.
Read()
将读取X个字节并立即返回。ReadTimeout
无关紧要。
2. Read()
将读取X个字节并返回。
3. Read()
将读取X个字节并返回。需要再次调用read以读取其余的X个字节。
4. 对Read()
的调用将等待ReadTimeout
时间段以获取数据。
5. Read()
将立即返回0。如果有人能够给出一些澄清,我将不胜感激。
谢谢。
ReadTimeout
的文档:“读取操作等待数据的时间量”。Read()
实际上会阻塞调用者,直到收到足够的数据复制到缓冲区。除非出现错误(你得到0
字节)或超时(你得到少于你要求的字节数)。 - SinatrRead
在超时时会抛出异常,因此我不知道它何时会返回较少的内容。阻塞部分是正确的。 - Sinatr