为什么在没有任何连接的情况下继续下载?

Why download continues without any connection?

提问人:Hadi 提问时间:10/28/2018 最后编辑:Mike KinghanHadi 更新时间:11/2/2018 访问量:39

问:

我之前在这个链接中问过类似的问题,但我仍然有这个问题。这是一个解释我问题的代码:

package main;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class MainClass {

    public static void main(String[] args) throws IOException {
        URL url = new URL("http://speedtest-ny.turnkeyinternet.net/100mb.bin");
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.setReadTimeout(10000);
        con.setConnectTimeout(10000);
        con.connect();
        InputStream inputStream = con.getInputStream();
        int len;
        byte[] buffer = new byte[1024];
        while ((len = inputStream.read(buffer)) != -1) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("downlaoding : " + len);
        }
        System.out.println("finished");
    }

}

如果我在下载过程中断开笔记本电脑与互联网的连接,下载不会结束并继续一段时间(取决于我断开笔记本电脑与互联网的连接时间)。我的问题是:

  1. 为什么会这样?
  2. 我该如何解决这个问题?

请帮帮我。我真的需要你的答案。

如果我的句子语法不正确,我提前道歉。因为我的英语说得不好。

Java Android 下载 IOSTREAM

评论

1赞 Joe C 10/28/2018
鉴于您处理数据的速度有多慢 (1 kB/s),我怀疑数据已经下载并且只是缓冲等待您的进程处理它。您可以使用网络监控工具(如 Wireshark)来确认这一点。
0赞 Hadi 10/28/2018
@JoeC 您的意思是此代码不会将下载速度限制为 1 Kb/s 吗?
0赞 Joe C 10/28/2018
这是正确的。

答:

1赞 Joe C 10/28/2018 #1

您似乎认为此代码将下载速度限制为 1 kB/s。事实并非如此。

一旦服务器和 ISP 能够发送这些数据,这些数据将尽快下载到您的机器上(取决于您机器网络缓冲区的大小),并且它将缓冲在操作系统中的某个位置,直到 Java 进程请求它。