gpt4 book ai didi

java - HttpUrlConnection 和 setReadTimeout() 方法

转载 作者:可可西里 更新时间:2023-11-01 02:51:34 27 4
gpt4 key购买 nike

我想知道何时以及为何引发“java.net.SocketTimeoutException 读取超时”。

    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,并在第 55 行出现“java.net.SocketTimeoutException readtime out”异常。

while ((len = is.read(buffer)) > 0) {

所以我成功地获取了输入流,但是当我开始读取/写入它时,我遇到了这个异常。我检查文件的 732 Kb 是否已传输,直到出现异常。

所以我真的很困惑。请准确解释readtimeout方法。

最佳答案

read() 调用开始和从该点开始的指定超时到期之间没有数据到达时引发。也就是说,在超时时间内没有数据到达。

So I take the inputstream succesfully

不足为奇。它花费零时间并且在网络上不执行任何操作,因为您已经调用了 getResponseCode()(并且不执行任何操作)。

but when I start reading/writing it I take this exception.

所以数据到达很慢。

And I check that the 732 Kb of the file is transfered until the exception.

所以数据的结尾到达很慢。

注意 421 毫秒对于读取超时来说太短了。应该是几十秒。

关于java - HttpUrlConnection 和 setReadTimeout() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31916672/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com