我想知道何时以及为什么" java.net.SocketTimeoutException readtime out"被提出来了。
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setConnectTimeout(5000);
con.setReadTimeout(421);
int responseCode = con.getResponseCode();
InputStream is = con.getInputStream();
System.out.println("Inputstream done");
FileOutputStream fos = fos = new FileOutputStream("D:\\tryfile\\file1.csv");
byte[] buffer = new byte[4096]; //declare 4KB buffer
int len;
while ((len = is.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
is.close();
这是问题。我设置了读取超时值421,并且我采取了#34; java.net.SocketTimeoutException readtime out"第55行的例外情况。
while ((len = is.read(buffer)) > 0) {
所以我成功地接受了输入流,但是当我开始读/写它时,我接受了这个例外。我检查文件的732 Kb是否被转移到异常。
所以我真的很困惑。请准确解释readtimeout方法。
答案 0 :(得分:1)
在read()
调用开始和从该点开始的指定超时到期之间没有数据到达时引发它。换句话说,在超时期限内没有数据到达。
所以我成功地接受了输入流
不足为奇。它只需要零时间并且不会在网络上执行任何操作,因为您已经调用了getResponseCode()
(并且没有对其执行任何操作)。
但是当我开始阅读/写作时,我会接受这个例外。
所以数据来得很慢。
我检查文件的732 Kb是否被转移到异常。
因此数据的 end 进展缓慢。
NB 421ms对于读取超时来说太短了。它应该是几十秒。