understanding URLConnection.setReadTimeout()

2022-09-01 21:00:49

请考虑以下代码段:

URLConnection connection = target.openConnection();

connection.setConnectTimeout(5000); // 5 sec
connection.setReadTimeout(10000); // 10 sec

是设置可用于开始读取数据的最长时间,还是可用于完成读取数据的最长时间?connection.setReadTimeout

我的情况是,有了这个,java有10秒钟的时间开始从连接读取下一个字节的数据。完成从连接读取所有数据没有超时,因为我们不知道strean可能有多大。这是正确的吗?


答案 1

它用于“启动”读取数据。超时是为了设置对传入数据的等待时间的限制。当有数据可供读取时,超时不适用。

“如果超时在有数据可供读取之前过期,则会引发 a。java.net.SocketTimeoutException

甲骨文参考

简而言之 - 您的理解是正确的。


答案 2

根据oracle文档,如果读取超时期限内没有可用的数据,则可以引发异常

如果读取超时在数据可供读取之前过期,则在从返回的输入流读取时,可以引发 SocketTimeoutException。


推荐