2

我正在编写一个 Java 代码以使用 http 协议在站点上下载大量 zip 文件,每个文件的大小约为 1MB(1024KB)。

我知道有很多方法可以做到这一点。我只是在徘徊哪个是最快的,我想知道每次下载的进度,比如显示百分比数字之类的。

我只是给出我的代码版本,关于如何改进它的任何想法?

谢谢大家。

 public static void downloadFile(String downloadUrl , String fileName) throws Exception {
    URL url=new URL(downloadUrl); 
    URLConnection connection = url.openConnection();
    int filesize = connection.getContentLength(); 
    float totalDataRead=0; 
    java.io.BufferedInputStream in = new java.io.BufferedInputStream(connection.getInputStream()); 
    java.io.FileOutputStream fos = new java.io.FileOutputStream(fileName); 
    java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
    byte[] data = new byte[1024]; 
    int i=0; 
    while((i=in.read(data,0,1024))>=0) { 
        totalDataRead=totalDataRead+i; 
        bout.write(data,0,i); 
        float Percent=(totalDataRead*100)/filesize;
        System.out.println((int)Percent);
    }    
    bout.close(); 
    in.close();
}
4

2 回答 2

5

你过早地优化。网络带宽瓶颈可能会远远超过您正在进行的任何处理。

您不需要将 InputStream 包装在 BufferedInputStream 中。您可能希望使用更大的读取缓冲区大小,但这可能影响最小,具体取决于连接返回的 InputStream 的底层实现、内核级缓冲等。

对于进度条,将您目前阅读的内容除以 connection.getContentLength(),但请注意,如果长度未知,getContentLength() 可能会返回 -1(它只是为您提供 Content-length 的值标题)。在您阅读数据时,将进度信息传递给您选择执行的任何操作以将其显示给用户。

于 2013-08-06T09:02:45.413 回答
-4

我不知道,我花了8个小时。为了减少 24 小时,我取消了所有其他下载,没有使用互联网,并终止了所有其他后台任务。

于 2015-01-26T00:27:53.907 回答