[英]Fastest way to download file on site using java
我正在编写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();
}
您正在过早地进行优化。 网络带宽瓶颈可能远远超过您正在执行的任何处理。
您无需将InputStream包装在BufferedInputStream中。 您可能希望支持更大的读取缓冲区大小,但这可能影响最小,具体取决于连接返回的InputStream的基础实现,内核级缓冲等。
对于进度条,请阅读到目前为止的内容,然后将其除以connection.getContentLength(),但请注意,如果长度未知,则getContentLength()可能返回-1(它只是为您提供Content-length的值头)。 在读取数据时,将进度信息传递给您选择执行的任何操作以将其显示给用户。
我不知道,我花了8个小时。 为了减少24小时的访问量,我取消了所有其他下载,不使用互联网,并杀死了所有其他后台任务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.