understanding URLConnection.setReadTimeout()

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-27 17:36:04

问题


Consider the following snippet:

URLConnection connection = target.openConnection();

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

Does the connection.setReadTimeout sets the maximum time available for STARTING read data or is it the maximum time available for COMPLETING read data?

My understaning is that with that, java has 10 seconds to start reading the next byte of data from the connection. There is no timeout for finishing read all data from the connection as we do not know how big the strean may be. Is it correct?


回答1:


According to oracle docs, if no data is available for the read timeout period, exception can be thrown

A SocketTimeoutException can be thrown when reading from the returned input stream if the read timeout expires before data is available for read.




回答2:


It is for "starting" read data. The timeout is there to set a limit on how long the wait is for incoming data. The timeout doesn't apply when there is data available for reading.

"If the timeout expires before there is data available for read, a java.net.SocketTimeoutException is raised."

Oracle Reference

In short - your understanding is correct.




回答3:


you are right! connection.setReadTimeout not mean read complete, it mean when wait for 10s, when there're no more data read in, will throw a timeoutexception.



来源:https://stackoverflow.com/questions/24554342/understanding-urlconnection-setreadtimeout

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!