gpt4 book ai didi

java - 使用 Java 下载文件随机卡住

转载 作者:搜寻专家 更新时间:2023-10-31 20:04:41 25 4
gpt4 key购买 nike

当我尝试下载文件时(在本例中它只是一个图像,但真正的应用程序是一种更新机制),InputStream 似乎在read 时卡住。我很确定我的代码没问题,所以我想知道为什么会发生这种情况以及它是否只是在我的计算机上。有人可以运行这个吗?请注意,Timer 仅用于调试目的。

谢谢你。

这是一个显示问题的视频:Video

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();
}
}

最佳答案

您面临的问题是由 Java 7 引起的 - 详细说明是为了赋予 IPv6 比 IPv4 更高的优先级。

您可以通过设置系统属性 System.setProperty("java.net.preferIPv4Stack", "true");

将其改回 Java 6 中使用的 IPv4

此问题会影响所有基于 Java 的软件,但只发生在某些计算机上(可能取决于所使用的互联网连接):Downloads stops - “TCP Window Full”

关于java - 使用 Java 下载文件随机卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11650375/

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