现在的位置: 首页 > 综合 > 正文

第八部分 多线程下载实战

2013年08月15日 ⁄ 综合 ⁄ 共 4511字 ⁄ 字号 评论关闭

实战多线程下载

现在很多下载软件像迅雷,旋风等都使用了多线程下载技术。比起单线程下载多线程下载在同一时间段内发出多个下载请求,每个下载请求负责下载一段内容,充分利用了网络宽带。

因此本文就简单的通过实例来介绍怎么用多线程去下载文件。相信您看了这篇文章后也可以写个属于自己的下载软件。

首先我们需要考虑几个难题

1.如何获取远程文件的尺寸,这关系到开启多个下载线程。本代码采用比较简单的线程数决策策略。固定每个线程分担的字节数任务,根据远程文件尺寸来决定需要开启的下载线程。

2.如何实现分工下载,即每个线程只下载远程文件的一段。这是多线程下载的核心技术。

3.如何存储,组织各个线程下载得到的文件碎片,最后将其拼成一个完整的文件。

现在我们就来解决以上的难题:

首先第一个,获取远程文件的尺寸。在HTTP反馈报文的头(Header)部分有一些数据项,其中有一项便是Content-Length,表示的便是HTTP反馈报文的正文部分的字节数。我们经常以Post,Get等方式发起HTTP请求,实际上HTTP协议还支持以Head方式发出HTTP请求。具体后面代码中有说明。

第二个问题。HTTP有一个数据项:RANGE,它代表的是下载的字节范围,如0~1024代表从文件开始处下载到第1024个字节处。

第三个问题:使用随机文件存取技术。可以一边下载一边存储。当全部下载完成后,我们便得到了一个完整的文件拷贝。

具体就参考以下代码:

【上篇】
【下篇】

抱歉!评论已关闭.