使用Java随机冻结下载文件(Downloading files using Java random

2019-09-20 04:35发布

当我尝试下载一个文件(在这种情况下,它只是一个形象,但实际应用中是一个更新机制),将InputStream似乎冻结read 。 我敢肯定,我的代码是好的,所以我不知道为什么会这样,如果它只是我的电脑上。 可能有人请跑的? 请注意, Timer仅仅是用于调试目的。

非常感谢你。

下面是该问题的视频: 视频

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.URL;
import javax.swing.Timer;

public class FileDownloader {

    public final static int BUFFER_LENGTH = 1 << 14;

    private static Timer timeoutTimer = new Timer(5000, new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("Timeout");
            System.exit(0);
        }
    });

    public static void main(String [] args) throws Exception{
        URL url = new URL("http://host.trivialbeing.org/up/tdk-aug3-jokr-high-res-2.jpg");
        download(url, new File("joker.jpg"));
    }

    public static void download(final URL url, final File dest) throws IOException {
        FileOutputStream fos = new FileOutputStream(dest);
        BufferedOutputStream out = new BufferedOutputStream(fos);
        BufferedInputStream in = new BufferedInputStream(url.openStream());
        byte[] buf = new byte[BUFFER_LENGTH];
        int bytesRead;
        int bytesWritten = 0;
        timeoutTimer.start();
        while ((bytesRead = in.read(buf, 0, BUFFER_LENGTH)) != -1) {
            timeoutTimer.restart();
            out.write(buf, 0, bytesRead);
            out.flush();
            bytesWritten += bytesRead;
            System.out.println(bytesWritten / 1024 + " kb written");
        }
        in.close();
        out.close();

        System.out.println("Finished");
        fos.close();
    }
}

Answer 1:

你所面临的问题是由Java 7中造成的 - 在细节,以使IPv6的比IPv4更高的优先级。

你可以改回它的IPv4,因为它是Java 6中通过设置系统属性中使用System.setProperty("java.net.preferIPv4Stack", "true");

此问题会影响所有基于Java的软件,但只出现在某些计算机上(可能取决于互联网连接上使用): 下载站- “TCP窗口全部”



Answer 2:

好,我认为这是由我上面回答谁的家伙(罗伯特·我想)一个laggy系统或什么,但使用IPv6将是很难,如果你已经没有关于IPv4的很多。

就在coincedence我名叫罗伯特:)



文章来源: Downloading files using Java randomly freezes
标签: java io