5

ファイルをダウンロードしようとすると (この場合は単なるイメージですが、実際のアプリケーションは更新メカニズムです)、 で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();
    }
}
4

2 に答える 2

5
于 2012-07-25T14:30:23.873 に答える
0

OK、それはラグーなシステムだと思うか、私の上で答えた人 (Robert だと思います) によるものだと思いますが、ipv4 についてすでに多くのことをしていない場合、ipv6 を使用するのは難しいでしょう。

偶然にも私はロバートと名付けられました:)

于 2012-08-17T17:45:55.540 に答える