理解URLConnection.setReadTimeout()

lvi*_*ani 15 java timeout urlconnection

请考虑以下代码段:

URLConnection connection = target.openConnection();

connection.setConnectTimeout(5000); // 5 sec
connection.setReadTimeout(10000); // 10 sec
Run Code Online (Sandbox Code Playgroud)

是否connection.setReadTimeout设置了STARTING读取数据的最大可用时间,还是可用于完成读取数据的最大时间?

我的理解是,java有10秒钟的时间开始从连接中读取下一个数据字节.完成从连接读取所有数据没有超时,因为我们不知道可能有多大.这是对的吗?

And*_*_CS 11

它用于"启动"读取数据.超时用于设置等待传入数据的时间限制.当有可供读取的数据时,超时不适用.

"如果在有可用于读取的数据之前超时到期,java.net.SocketTimeoutException则会引发a."

Oracle参考

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

  • 所以这个超时不能让我们免于像慢车这样的攻击,对吧? (2认同)

小智 9

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

如果读取超时在数据可用于读取之前到期,则在从返回的输入流读取时可以抛出SocketTimeoutException.


小智 5

你是对的!connection.setReadTimeout并不意味着读取完成,它意味着等待10秒,当没有更多的数据读入时,将抛出一个timeoutexception.