java 多线程下载文件
2019独角兽企业重金招聘Python工程师标准>>>
1.基本思路
2.源码
package cn.itcast.download;import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.RandomAccess;public class MulThreadDownload {
public static void main(String[] args) throws Exception {String path = "http://localhost:8080/web/Dreamweaver.exe";new MulThreadDownload().download(path,3);
}
/*** ************************* *0*1*2*3*4*5*6*7*8*9*10* 文件字节* ************************* threadid:0 1 2* int block = 4 每一个下载多少* int start = threadid*block 开始位置* int end = (threadid+1)*block-1 结束位置*/
public void download(String path,int threadsize) throws Exception{URL url = new URL(path);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");if(conn.getResponseCode()==200){//网络资源长度int length = conn.getContentLength();//new File中的参数如果直接写名字,那么表示绝对路径,会存放在当前项目下;File file = new File(getFilename(path));//RandomAccessFile是用来访问那些保存数据记录的文件的,其大小和位置必须是可知的,它可以指定seek,搜索指定的位置,在指定位置写入数据;//rwd 参数是权限,表示将读取到的资源立马写入文件中;//多线程下载先要生成一个大小一样的文件,在进行写入;RandomAccessFile accessFile = new RandomAccessFile(file, "rwd");accessFile.setLength(length);accessFile.close();int block = length%threadsize==0?length/threadsize:length/threadsize+1;for (int threadid = 0; threadid < threadsize; threadid++) {new DownloadThread(threadid,block,url,file).start();}}else{System.out.println("下载失败");}}
private class DownloadThread extends Thread{
private int threadid;
private int block;
private URL url;
private File file;public DownloadThread(int threadid, int block, URL url, File file) {this.block=block;this.threadid=threadid;this.url=url;this.file=file;}@Overridepublic void run() {int start = threadid*block;int end = (threadid+1)*block-1;try {RandomAccessFile accessFile = new RandomAccessFile(file, "rwd");accessFile.seek(start);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.setRequestMethod("GET");//设置头信息,表明要读取网络资源的从哪个地方开始-哪个地方结束conn.setRequestProperty("Range", "bytes="+start+"-"+end);if(conn.getResponseCode()==200){InputStream inputStream = conn.getInputStream();byte[] buffer = new byte[1024];int len = 0;while ((len=inputStream.read(buffer))!=-1) {accessFile.write(buffer,0,len);}accessFile.close();}accessFile.close();System.out.println("第"+threadid+"线程已经下载完成");} catch (Exception e) {e.printStackTrace();}}}
private String getFilename(String path) {return path.substring(path.lastIndexOf("/")+1);
}
}
转载于:https://my.oschina.net/gaoguofan/blog/753316
java 多线程下载文件相关推荐
- Java多线程下载文件
Java多线程下载文件 优化:合理利用服务器资源,将资源利用最大化,加快下载速度 一般有两种方式: 线程池里面有N个线程,多线程下载单个文件,将网络路径的文件流切割成多快,每个线程下载一小部分,然后写 ...
- java 多线程下载文件并实时计算下载百分比(断点续传)
多线程下载文件 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来 ...
- java多线程下载文件(断点下载、进度展示、网速展示)
引言 多线程是多任务的一种特别的形式,但多线程使用了更小的资源开销. 多线程能满足程序员编写高效率的程序来达到充分利用 CPU 的目的. 一个线程可以创建和撤销另一个线程:同一个进程中的多个线程之间可 ...
- java线程下载文件_Java多线程下载文件实例详解
本文实例为大家分享了Java多线程下载文件的具体代码,供大家参考,具体内容如下 import java.io.File; import java.io.InputStream; import java ...
- 【Java】网络编程——多线程下载文件
前言 多线程下载文件,比单线程要快,当然,线程不是越多越好,这和获取的源文件还有和网速有关. 原理:在请求服务器的某个文件时,我们能得到这个文件的大小长度信息,我们就可以下载此长度的某一个片段,来达到 ...
- Java实现多线程下载文件
这是本人在实际开发当中遇到的多线程下载文件并记录下来 public class DownloadUtil {private String pathFile;private String strFile ...
- Java多线程下载分析方法
为什么要多线程下载 俗话说要以终为始,那么我们首先要明确多线程下载的目标是什么,不外乎是为了更快的下载文件.那么问题来了,多线程下载文件相比于单线程是不是更快? 对于这个问题可以看下图. 横坐标是线程 ...
- 多线程下载文件实践之旅
目录 1.使用场景 2.多线程下载原理 3.请求如何分段下载 3.1.需要请求的数据如何分段. 3.2.分段下载的数据如何组装成完整的数据文件. 4.关键代码实现 3.成果展现 4.总结 5.参考文章 ...
- Java多线程下载器(简洁版)
Java多线程下载器 https://github.com/rawchen/JDownloader/archive/refs/heads/master.zip 五一无聊搞出来的,虽然已存在IDM.XD ...
最新文章
- linux 定位 踩内存_运维必备的问题定位工具及案例分析
- Fetcher类的工作流程
- c#中调用Excel
- python分子化学模拟_python简单实现gillespie模拟
- 竹签子毕竟是_毕竟是什么程序和功能?
- 如何编写NetBeans插件
- 求一个向量变换为另一个向量的矩阵_OpenGL里旋转等变换矩阵为什么是4x4的矩阵...
- 资源地址整合与备份,即时更新
- 无心剑随感《爱心教育》
- mysql 死锁 代码_MySQL死锁问题解决的代码详细介绍
- 数据分析 -- 流程
- 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】03_分布式扩展
- 在校大学生计算机等级考试可以在其他省考吗
- 「AR裸眼插画」零基础入门级教程来啦
- 道家王凤仪《五行语录》
- 你是开发工程师、程序员还是码农?
- 二清分账不解决,平台企业还能走多远?
- CST 2022时间如何格式化
- 手机病毒的剖析与防治
- 更改本地计算机用户名,Win10怎么修改本地账号的用户名