HttpUrlConnection和setReadTimeout()方法

时间:2015-08-10 10:00:45

标签: java sockets http tcp httpurlconnection

我想知道何时以及为什么" 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方法。

1 个答案:

答案 0 :(得分:1)

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

  

所以我成功地接受了输入流

不足为奇。它只需要零时间并且不会在网络上执行任何操作,因为您已经调用了getResponseCode()(并且没有对其执行任何操作)。

  

但是当我开始阅读/写作时,我会接受这个例外。

所以数据来得很慢。

  

我检查文件的732 Kb是否被转移到异常。

因此数据的 end 进展缓慢。

NB 421ms对于读取超时来说太短了。它应该是几十秒。