基于java多线程的下载器源码剖析

基于java多线程的下载器源码剖析

ID:11193323

大小:725.50 KB

页数:26页

时间:2018-07-10

基于java多线程的下载器源码剖析_第1页
基于java多线程的下载器源码剖析_第2页
基于java多线程的下载器源码剖析_第3页
基于java多线程的下载器源码剖析_第4页
基于java多线程的下载器源码剖析_第5页
资源描述:

《基于java多线程的下载器源码剖析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、基于Java多线程的下载器源码剖析(一)分类: JavaHYPERLINK"http://blog.csdn.net/zhzhl202/article/category/1136415"多线程2012-04-2821:29 747人阅读 评论(6) 收藏 举报多线程HYPERLINK"http://blog.csdn.net/tag/details.html?tag=java"javaHYPERLINK"http://blog.csdn.net/tag/details.html?tag=download"downloadHYPERLINK"http://blog.csdn.net/tag

2、/details.html?tag=byte"byteHYPERLINK"http://blog.csdn.net/tag/details.html?tag=file"fileHYPERLINK"http://blog.csdn.net/tag/details.html?tag=exception"exception目录(?)[+]本文实现了一个基于Java多线程的下载器,可提供的功能有:1.对文件使用多线程下载,并显示每时刻的下载速度。2.对多个下载进行管理,包括线程调度,内存管理等。这篇文章的结构如下:首先讨论如何实现利用Java多线程对单个文件进行下载。然后讨论当系统中有多个文件下

3、载,如何对这些下载进行管理。包括线程调度,内存管理等。一:单个文件下载的管理1.单文件下载类层次首先简要介绍一下单个文件下载管理的类层次:来一张图来表示。 ·为需要下载的文件创建一个Download类,Download负责管理该文件下载时的线程管理、文件管理、当前速度计算等操作。·根据线程的数目tNum,将该文件分为tNum段,每段为一个DownloadBlock。在实际下载的过程中,并不是一次把所有的东西下载完,而是每次下载固定size的一段Di。所以每个DownloadBlock又会分成n段。·为每个DownloadBlock申请一个线程DownloadThread。其主要作用就是每

4、次下载一段Di,并将其写入到文件中。2.单文件下载对于单个下载,步骤如下·连接资源服务器,获取资源信息,创建文件· 切分资源,为每个线程分配固定的下载区域。1)封装下载的属性在建立下载之前,我们把每一次下载进行抽象封装。首先把URL、目标文件等封装在一个DownloadConfig类中。其中包含了4个属性:[java] viewplainHYPERLINK"http://blog.csdn.net/zhzhl202/article/details/7521377"copy·private URL url; //文件下载地址  ·private File file; //下载文件保存目标文

5、件  ·private int nthread; //下载该文件需要的线程数  ·private int priority; //该下载的优先级  如下如所示:2)连接资源服务器,获取资源信息,创建文件,并指定文件大小[java] viewplainHYPERLINK"http://blog.csdn.net/zhzhl202/article/details/7521377"copy·length = config.getUrl().openConnection().getContentLength();  ·RandomAccessFile file = new RandomAcces

6、sFile(config.getFile(), "rw");  ·file.setLength(length);  ·file.close();  3)切分资源,为每个线程分配固定的下载区域,并将当前的下载加入到队列中[java] viewplainHYPERLINK"http://blog.csdn.net/zhzhl202/article/details/7521377"copy·int size = length / config.getNthread();  ·for(int i = 0; i < config.getNthread(); i++){  ·    int star

7、t = i * size;  ·    int len;  ·    if(i == config.getNthread() - 1)  ·        len = length - start;  ·    else len = size;  ·//并将当前的下载加入到下载队列中  ·    addDownloadBlock(getDownloadBlock(start, len));  ·}  3)启动线程进行下载下载的步骤如

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。