Cuando intento descargar un archivo (en este caso es solo una imagen pero la aplicación real es un mecanismo de actualización), el InputStream
parece congelarse en read
. Estoy bastante seguro de que mi código está bien, así que me pregunto por qué sucede esto y si solo está en mi computadora. ¿Alguien podría correr esto? Tenga en cuenta que el Timer
es simplemente para fines de depuración.Descargando archivos usando Java se congela aleatoriamente
Gracias amablemente.
Aquí hay un video que muestra el problema: 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();
}
}
Lo ejecuté 10 veces seguidas, sin problemas. –
Acabo de probar el código en mi sistema y no tuve problemas para descargar el comodín :). Esto está en XUbuntu 12.4 con IcedTea 6 JRE. Lo único que se me ocurre es descargar la secuencia de salida en el ciclo, pero no veo cómo esto podría cambiar nada. – bchurchill
Lo intentaré. Sin embargo, ¡se congela casi cada vez que lo intento! – rtheunissen