考虑以下代码片段:
URLConnection connection = target.openConnection();
connection.setConnectTimeout(5000); // 5 sec
connection.setReadTimeout(10000); // 10 sec
connection.setReadTimeout
设置的是开始读数据的最大可用时间还是完成读数据的最大可用时间?
我的理解是,java有10秒的时间开始从连接中读取下一个字节的数据。从连接中读取所有数据没有超时,因为我们不知道流可能有多大。对吗?
用于"开始"读取数据。超时用于限制传入数据的等待时间。当有数据可读时,超时不适用。
"如果超时在有可用数据可读之前到期,则引发java.net.SocketTimeoutException
。"
总之,你的理解是正确的。
根据oracle文档,如果在读取超时时间内没有可用的数据,则会抛出异常
从返回的数据读取时可能会抛出SocketTimeoutException如果读取超时在数据可用之前到期,则输入流阅读。
你是对的!
connection.setReadTimeout
不意味着读取完成,它意味着当等待10s时,当没有更多的数据读取时,将抛出超时异常。