微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐