ファイルをダウンロードしようとすると(この場合は画像ですが、実際のアプリケーションは更新メカニズムです)、InputStream
はread
でフリーズしているようです。私は自分のコードが大丈夫だと確信しているので、なぜこれが起こり、それが私のコンピュータ上にあるのだろうと思います。誰かがこれを実行してもらえますか? Timer
はデバッグ目的のためのものです。Javaを使用してファイルをランダムにダウンロードする
ありがとうございました。 IPv6にはIPv4よりも高い優先順位を与えることを詳細に - 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();
}
}
私は問題なく10回連続して実行しました。 –
私のシステムでコードを試したところ、ジョーカーをダウンロードしても何の問題もありませんでした:)。これはIcedTea 6 JREを使ったXUbuntu 12.4上です。私には唯一起こっているのは、ループ内の出力ストリームをフラッシュすることですが、どのように変化するのかは分かりません。 – bchurchill
私はそれを試みます。それは私がそれを試みるたびにほとんどフリーズする! – rtheunissen