java多线程实现文件下载功能

这篇文章主要介绍了java多线程实现文件下载功能的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

多线程下载文件的思路:

1.首先获取文件的总大小

获取文件大小的方式是通过网络读取,getContentLength()即可获取文件的大小,使用RandomAccessFile()支持随机访问

2.根据所准备的线程数据,计算每一个线程需要下载的文件的大小

上图显示下载400M的电影分4个线程下载,每一个线程分别下载各自数据段中的数据,第一个线程下载0-100M,第二个下载100M-200M之间的数据,依次类推。因此下载过程中需要记住的是的开始位置段和结束位置段,其实只需要开始位置就可以了,结束为止可以根据开始位置加上下载的大小来推断获取

3.获取到大小数据以后,开始用线程循环读取每一个间的数据

这个里面需要注意的是,要更新数据的写入位置seek(startIndex),逐段填满,不然会出现覆盖以前的数据。

package com.ldw.multilthreaddownload; import java.io.File; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; public class Multidownload { static int ThreadCount = 3; //线程的个数 static String path = "http://192.168.0.102:8080/QQ.exe"; //确定下载地址 public static void main(String[] args) { // Todo Auto-generated method stub //发送get请求,请求这个地址的资源 try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); if(conn.getResponseCode() == 200){ //获取到请求资源文件的长度 int length = conn.getContentLength(); File file = new File("QQ.exe"); //创建随机存储文件 RandomAccessFile raf = new RandomAccessFile(file, "rwd"); //设置临时文件的大小 raf.setLength(length); //关闭raf raf.close(); //计算出每一个线程下载多少字节 int size = length / Multidownload.ThreadCount; for(int i = 0; i

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...