一种文件下载方法及装置与流程

文档序号:12494542阅读:279来源:国知局
一种文件下载方法及装置与流程

本发明属于计算机技术领域,尤其涉及一种文件下载方法及装置。



背景技术:

随着无线通信网络和互联网的快速发展,移动终端设备普及率越来越高,越来越多的用户通过移动终端设备从网络下载文件,文件是存储于储存设备上的一段数据流,文件的大小影响下载时间的长短,文件大,下载时间长。

应用程序(Application,缩写为App)是安装在移动终端设备中的第三方应用程序,用户通过应用程序享用互联网中的各种服务,随着用户对应用的需求增多,移动终端设备中同时运行的应用程序也增多,而现有技术中在应用程序中下载文件仅支持单线程下载,当用户有在移动终端设备中有多个下载文件的需求时,则依次下载,但会长期占用移动终端软硬件资源且资源利用率低,又使得带宽的有效利用率低,对用户而言需等待下载完成方能下一步操作,降低了用户体验。



技术实现要素:

本发明的目的在于提供一种文件下载方法及装置,旨在解决由于现有技术中在移动终端设备中仅支持单线程下载文件,导致多文件下载时占用资源,资源利用率低、带宽利用率低且用户体验差的问题。

一方面,本发明提供了一种文件下载方法,所述方法包括下述步骤:

在接收到用户在应用程序中触发的对文件的下载请求时,由所述下载请求获取所述文件的长度;

依据所述文件的长度和预设线程数计算所述文件的每个下载线程的数据长度和下载起止位置,所述文件对应多个所述下载线程;

在检测到线程池中存在空闲线程时,将所述文件的每个下载线程分配给所述空闲线程,依据所述计算的每个下载线程的数据长度和下载起止位置将所述应用程序对应的文件的每个下载线程的数据进行并行下载。

另一方面,本发明提供了一种文件下载装置,所述装置包括:

获取单元,用于在接收到用户在应用程序中触发的对文件的下载请求时,由所述下载请求获取所述文件的长度;

计算单元,用于依据所述文件的长度和预设线程数计算所述文件的每个下载线程的数据长度和下载起止位置,所述文件对应多个所述下载线程;

下载单元,用于在检测到线程池中存在空闲线程时,将所述文件的每个下载线程分配给所述空闲线程,依据所述计算的每个下载线程的数据长度和下载起止位置将所述应用程序对应的文件的每个下载线程的数据进行并行下载。

在本发明实施例中,在接收到用户在应用程序中触发的对文件的下载请求时,可获取文件的长度,进而依据文件的长度和预设线程数计算文件的每个下载线程的数据长度和下载起止位置,从而在检测到线程池中存在空闲线程时,将文件的每个下载线程分配给空闲线程,依据每个下载线程的下载起止位置将应用程序对应的文件的每个下载线程的数据进行并行下载。

实现了在移动终端设备中多线程下载文件,在线程池中支持多个线程并行下载,支持多个不同应用程序的文件的并行下载,同一应用程序的多个不同文件的并行下载,还支持同一文件的分段多线程并行下载,从而有效提升了移动终端资源的利用率,提高了带宽的有效利用率,提高了下载速度,增强了用户体验。

附图说明

图1是本发明实施例一提供的文件下载方法的实现流程图;

图2是本发明实施例二提供的文件下载方法的程序流程图;

图3是本发明实施例三提供的文件下载方法的示意图;

图4是本发明实施例四提供的文件下载方法的实现流程图;

图5是本发明实施例五提供的文件下载装置的结构图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本发明实施例中的文件下载方法及装置可运行于移动终端设备中,其实,移动终端设备如智能手机、智能手表等。本发明实施例中的文件类型包括如文档、音视频、图像、应用程序等,还可以包括压缩包等,具体不受本发明实施例的限制。

以下结合具体实施例对本发明的具体实现进行详细描述:

实施例一:

图1示出了本发明实施例一提供的文件下载方法的实现流程,为了便于说明,仅示出了与本发明实施例相关的部分,详述如下:

S101,在接收到用户在应用程序中触发的对文件的下载请求时,由下载请求获取文件的长度。

作为一种可选的实施方式,用户通过移动终端设备中的应用程序触发文件的下载,在接收到用户在应用程序中触发的对文件的下载请求时,从下载请求的头信息中获取文件的长度(getContentLength())。进一步的,下载请求还包括文件的统一资源定位符URL,即下载地址。

进一步可选的,下载请求还可以包括应用程序的应用标识,应用标识用于唯一标识移动终端设备中安装的应用程序。进一步的,下载请求还可以包括文件标识,文件标识用于唯一标识移动终端设备的应用程序中下载的文件。

进一步可选的,可在数据库中建立下载状态表,用于存储下载状态信息,表项内容可包括:_id(主键)、URL(下载链接)、taskId(线程标识,如文件的下载线程编号)、downloadLength(该线程已下载的长度)、downloadSuccess(该线程是否下载完成的标识)。

S102,依据文件的长度和预设线程数计算文件的每个下载线程的数据长度和下载起止位置,文件对应多个下载线程。

作为一种可选的实施方式,文件可对应多个下载线程,即将文件分段,每段对应一个下载线程进行下载。由步骤S101获取到文件的长度,而预设线程数为预先设置的一个文件对应的下载的线程的数量,具体实现中,预设线程数可以为预设定值,如3,即一个文件由3个线程下载,进一步的,预设线程数还可以根据文件的大小进行设置。

进一步可选的,若在检测到在文件的长度小于预设文件长度时,则预设线程数为预设定值。若在检测到文件的长度大于预设文件长度时,则预设线程数为文件的长度除以预设线程区块长度得到的数值。其中,预设文件长度为预先设置的文件长度,如50M等。预设线程区块长度为预先设置的一个线程的下载长度,如3000字节等。

作为一种可选的实施方式,步骤S102中依据文件的长度和预设线程数计算文件的每个下载线程的数据长度和下载起止位置具体包括:

将文件的长度除以预设线程数,得到文件的每个下载线程的数据长度;

由文件的每个下载线程的数据长度计算文件的每个线程的下载开始字节位置和下载结束字节位置;下载起止位置包括:下载开始字节位置和下载结束字节位置。

具体实现中,通过设置Http的Range头字段指定每个下载线程的下载起止位置,具体的,即每个下载线程从文件的什么位置开始下载,下载到什么位置为止,如文件1包括3个线程,文件1共3000字节,每个线程下载1000字节,则文件1的下载线程1在http请求头中设置为:“Range:bytes=0-999”,文件1的下载线程2在http请求头中设置为:“Range:bytes=1000-2000”,文件1的下载线程3在http请求头中设置为:“Range:bytes=2001-3000”。

S103,在检测到线程池中存在空闲线程时,将文件的每个下载线程分配给空闲线程,依据计算的每个下载线程的数据长度和下载起止位置将应用程序对应的文件的每个下载线程的数据进行并行下载。

作为一种可选的实施方式,线程池中包括多个线程可供下载。若该文件的下载请求为首次请求,则在下载列表中检测到该文件的URL不存在,则在检测到线程池中存在空闲线程时将文件的每个下载线程分配给空闲线程,进而进行并行下载。若该文件的下载请求不是首次请求,则在下载列表中检测到该文件的URL存在,则计算已下载的数据长度,并根据已下载的数据长度更新下载线程的起止位置。

具体实现中,可在本地创建文件,用于下载文件,并设置该创建的文件的大小,本地创建的文件的大小与待下载的文件的长度相同。

具体的,依据计算的每个下载线程的数据长度和下载起止位置将应用程序对应的文件的每个下载线程的数据进行并行下载具体包括:

依据文件的每个下载线程的下载起止位置将文件的每个下载线程的数据并行写入存储区。

具体实现中,可通过RandomAccessFile类指定每个线程从存储区的具体位置开始写入数据,具体如下载网络文件的指定起止位置到本地文件的起止位置通过RandomAccessFile类实现,该类可通过seek方法指定输入流写入的位置。其中,存储区包括移动终端设备本身的存储空间、存储卡等。

作为一种可选的实施方式,本发明实施例中支持多线程并行下载,其中,多线程不局限于一个文件的多线程下载,还支持多个文件多线程下载,还支持来自不同应用程序的多个文件的多线程下载。

进一步可选的,下载完成后,在下载状态表中更新各个线程对应的表项内容,如将downloadSuccess标识为已完成。

在本发明实施例中,在接收到用户在应用程序中触发的对文件的下载请求时,可获取文件的长度,进而依据文件的长度和预设线程数计算文件的每个下载线程的数据长度和下载起止位置,从而在检测到线程池中存在空闲线程时,将文件的每个下载线程分配给空闲线程,依据计算的每个下载线程的数据长度和下载起止位置将应用程序对应的文件的每个下载线程的数据进行并行下载。

实现了在移动终端设备中多线程下载文件,在线程池中支持多个线程并行下载,支持多个不同应用程序的文件的并行下载,同一应用程序的多个不同文件的并行下载,还支持同一文件的分段多线程并行下载,从而有效提升了移动终端资源的利用率,提高了带宽的有效利用率,提高了下载速度,增强了用户体验。

实施例二:

图2示出了本发明实施例二提供的文件下载方法的程序流程图,为一个文件进入下载时的程序流程图,包括步骤S201~S209,详述如下:

S201,接收用户在应用程序中触发的对文件的下载请求。下载请求包括文件的URL。

S202,获取文件的长度并计算文件的每个下载线程的下载起止位置。

S203,判断文件的URL是否在下载列表中。若是,执行步骤S204,若否,执行步骤S205。

S204,将每个下载线程的下载起止位置加上各线程已下载的数据长度。

S205,判断线程池中是否存在空闲线程。若是,执行步骤S207,若否执行步骤S206。

S206,进入下载线程等待序列。

S207,将文件的每个下载线程分配给空闲线程,并进行并行下载。

S208,每个下载线程下载完成后,更新该下载线程的状态。

S209,检测到该文件的所有线程下载结束后,删除该文件的URL。

具体实现中,在接收到用户触发的下载请求后,从请求头中获取到文件的长度以及文件的URL,进而根据文件的长度和预设线程数计算文件的每个下载线程的数据长度,具体可将文件的长度除以预设线程数,得到文件的每个下载线程的数据长度。进而由文件的每个下载线程的数据长度计算文件的每个线程的下载开始字节位置和下载结束字节位置。

若检测到文件的URL在下载列表中,则需更新对应线程的下载起止位置,具体的,将步骤S202中计算得到的线程的下载起止位置加上对应线程已经下载的数据长度,进而得到更新的线程的下载起止位置。若URL不在下载列表中,则直接进行步骤S205。

在检测到线程池中不存在空闲线程时,则将文件对应的下载线程进入下载线程等待序列,返回不在S206。

在检测到线程池中存在空闲线程时,则将文件的每个下载线程分配给空闲线程,进行并行下载。当每个下载线程下载完成后,在下载状态表中更新各个线程对应的表项内容,如将downloadSuccess标识为已完成。

在检测到该文件的所有线程下载结束后,删除该文件的URL,具体将已全部下载完成的URL从下载列表中删除。

本发明实施例提供的文件下载方法,可对已下载的线程片段进行自动叠加,避免重复下载浪费资源,同时支持多线程并行下载,多线程不局限于一个文件的多线程下载,还支持多个文件多线程下载,从而有效提升了移动终端资源的利用率,提高了带宽的有效利用率,提高了下载速度,增强了用户体验。

实施例三:

图3示出了本发明实施例三提供的文件下载方法的示意图,其中,(a)为一个应用对应多个文件的下载方法示意图,(b)为多个应用对应的文件下载方法示意图。

如图3(a)所示,用户在应用中下载4个文件,假如文件1、2、3、4是先后触发的下载请求,每个文件分为3个线程,设定此时线程池中最多允许并行下载10个线程,则文件1、文件2、文件3的全部线程可进入下载,文件4的线程1进入下载,文件4的线程2和文件4的线程3进入等待序列,待有空闲线程时再进入下载。

具体文件如何分为3个线程的方法参见实施例1中详述,在此不重复。对于一个文件分为多线程下载,可大大提升了下载速度,使得移动终端设备的资源得以充分利用。而对用户可见的下载进度可显示为一个文件的进度,一个文件的各个线程的下载进度可对用户隐藏。

如图3(b)所示,用户在应用1中下载文件1,在应用2中下载文件2和文件3,在应用3中下载文件4,假如文件1、2、3、4是先后触发的下载请求,每个文件分为3个线程,设定此时线程池中最多允许并行下载10个线程,则文件1、文件2、文件3的全部线程可进入下载,文件4的线程1进入下载,文件4的线程2和文件4的线程3进入等待序列,待有空闲线程时再进入下载。

具体文件如何分为3个线程的方法参见实施例1中详述,在此不重复。下载请求中可包括应用程序的应用标识、文件的文件标识、URL等,同时还可对文件的每个线程进行编号,得到每个文件的线程标识,对于一个移动终端设备中可同时下载来自不同应用程序的文件,对具体的每一个文件又可以分为多线程下载,可大大提升下载速度,使得设备的资源得以充分利用。

实施例四:

图4示出了本发明实施例四提供的文件下载方法的实现流程图,包括步骤S401~S409,详述如下:

S401,接收到多个下载请求,为用户在多个应用程序中触发的对应用标识对应的文件的下载请求。

作为一种可选的实施方式,可以理解为同时收到多个下载请求,或者在极短的时间内收到多个下载请求。具体的,用户在多个应用程序中触发的对文件的下载请求,即应用标识对应的文件的下载请求。具体实现中,下载请求中包括应用程序的应用标识,进一步的,还包括文件的URL。更进一步的,还可以包括文件的文件标识。

S402,获取各个应用标识对应的文件的长度。

作为一种可选的实施方式,计算每个应用标识对应的文件的长度。具体可从下载请求的头信息中获取文件的长度。一个应用标识可以对应至少一个文件。

S403,计算各个应用标识对应的各个下载线程的下载起止位置。

作为一种可选的实施方式,计算每个应用标识对应的各个文件的各个下载线程的下载起止位置,具体的,将文件的长度除以预设线程数,得到文件的每个下载线程的数据长度;或者由文件的每个下载线程的数据长度计算文件的每个线程的下载开始字节位置和下载结束字节位置。其中,若在检测到在文件的长度小于预设文件长度时,则预设线程数为预设定值。若在检测到文件的长度大于预设文件长度时,则预设线程数为文件的长度除以预设线程区块长度得到的数值。

S404,判断线程池中是否存在空闲线程。若是,执行步骤S406,若否执行步骤S405。

S405,进入下载线程等待序列。

S406,计算空闲线程的数量和应用标识对应的下载线程的数量。

作为一种可选的实施方式,计算空闲线程的数量,进一步的,计算应用标识对应的下载线程的数量,如图3(b)所示,则应用1的下载线程的数量为3,应用2的下载线程的数量为6,应用3的下载线程的数量为3。

S407,判断应用标识对应的下载线程的数量与空闲线程的数量的差值是否大于0,若是执行步骤S409,若否执行步骤S408。

作为一种可选的实施方式,计算应用标识对应的下载线程的数量与空闲线程的数量的差值,并判断该差值是否大于0。即判断线程池中能否满足多个应用的多线程下载请求。

S408,将应用标识对应的全部下载线程的数据进行并行下载。

作为一种可选的实施方式,在步骤S407中的判断结果为否时,即应用标识对应的下载线程的数量与空闲线程的数量的差值不大于0,即应用标识对应的下载线程的数量小于或等于空闲线程的数量时,应用标识对应的全部下载线程的数据可进行并行下载。

S409,依据应用标识对应的文件优先级将应用标识对应的文件的下载线程分配给空闲线程并进行并行下载。

作为一种可选的实施方式,在步骤S407中的判断结果为是时,即应用标识对应的下载线程的数量与空闲线程的数量的差值大于0,即应用标识对应的下载线程的数大于空闲线程的数量时,依据应用标识对应的文件优先级将应用标识对应的文件的下载线程分配给空闲线程并进行并行下载。

其中,不同的应用标识可对应不同的文件优先级,在线程有限情况下,优先满足优先级高的文件的下载。具体的,如可根据文件的长度来设定优先级γ,文件长度(ρl)越大优先级越小,文件长度越小优先级越高,γ=1/ρl。进一步的,还可以根据应用的优先级来设定文件的下载优先级,应用的优先级高则文件的下载优先级也高,应用的优先级低则文件的下载优先级也低。进一步的,还可采用先来先服务(First-come-First-Service,FCFS)的方式进行处理,下载请求的触发时间越早优先级越高,γ=ρt。进一步的,还可以根据文件的类型设定文件的下载优先级,如设置优先级由高到低分别为:文档—应用程序—音视频,则依据文档类型的优先级进行文件的下载,文档类型的优先级高的优先下载,文档类型的优先级低的其下载优先级也低。

本发明实施例提供文件的下载方法,实现了多个下载请求情况下的并行下载,支持多个应用的多个文件的多线程下载。当出现空闲线程数量不够时,而文件的下载需求多时,可根据应用标识对应的文件优先级进行并行下载。多线程不局限于一个文件的多线程下载,还支持多个文件多线程下载,支持多个应用中的多文件多线程下载,从而有效提升了移动终端资源的利用率,提高了带宽的有效利用率,提高了下载速度,增强了用户体验。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘、光盘等。

实施例五:

图5示出了本发明实施例五提供的文件下载装置的结构,为了便于说明,仅示出了与本发明实施例相关的部分,其中,本发明实施例提供的装置可包括:获取单元51、计算单元52以及下载单元53。

获取单元51,用于在接收到用户在应用程序中触发的对文件的下载请求时,由下载请求获取文件的长度。

作为一种可选的实施方式,获取单元51在接收到用户在应用程序中出发的对文件的下载请求时,从下载请求的头信息中获取文件的长度(getContentLength())。进一步的,下载请求还包括文件的URL,即下载地址。

进一步可选的,下载请求还可以包括应用程序的应用标识,应用标识用于唯一标识移动终端设备中安装的应用程序。进一步的,下载请求还可以包括文件标识,文件标识用于唯一标识移动终端设备的应用程序中下载的文件。

计算单元52,用于依据获取单元51中获取的文件的长度和预设线程数计算文件的每个下载线程的数据长度和下载起止位置,文件对应多个下载线程。

作为一种可选的实施方式,文件可对应多个下载线程,即将文件分段,每段对应一个下载线程进行下载。进一步可选的,文件的长度小于预设文件长度时,预设线程数为预设定值;文件的长度大于预设文件长度时,预设线程数为文件的长度除以预设线程区块长度得到的数值。

下载单元53,用于在检测到线程池中存在空闲线程时,将文件的每个下载线程分配给空闲线程,依据计算单元52计算的每个下载线程的数据长度和下载起止位置将应用程序对应的文件的每个下载线程的数据进行并行下载。

进一步可选的,计算单元52还可以包括:长度计算子单元和位置计算子单元,其中:

长度计算子单元,用于将文件的长度除以预设线程数,得到文件的每个下载线程的数据长度;

位置计算子单元,用于由文件的每个下载线程的数据长度计算文件的每个线程的下载开始字节位置和下载结束字节位置;下载起止位置包括:下载开始字节位置和下载结束字节位置;

进一步的,下载单元53具体用于:依据文件的每个下载线程的下载起止位置将文件的每个下载线程的数据并行写入存储区。

进一步可选的,计算单元52具体用于:在检测到文件的URL在下载列表中时,获取文件已下载的数据大小,并根据获取的所述文件已下载的数据的大小更新文件的每个线程的下载起止位置。其中,下载请求包括文件的统一资源定位符URL。

进一步可选的,下载请求包括应用程序的应用标识;下载请求为多个,且为用户在多个应用程序中触发的对应用标识对应的文件的下载请求时,计算单元52还可以包括:线程数量计算子单元。其中:

线程数量计算子单元,用于计算应用标识对应的下载线程的数量;

线程数量计算子单元,还用于计算空闲线程的数量;

进一步的,下载单元53包括:第一下载子单元和第二下载子单元。

第一下载子单元,用于在应用标识对应的文件的下载线程的数量小于或等于空闲线程的数量时,将应用标识对应的全部下载线程的数据进行并行下载;

第二下载子单元,用于在应用标识对应的文件的下载线程的数量大于空闲线程的数量时,依据应用标识对应的文件优先级将应用标识对应的文件的下载线程分配给空闲线程并进行并行下载。

进一步的,获取单元51、计算单元52以及下载单元53的执行细节可参见实施例一,分别对应实施例一中步骤S101、步骤S102、步骤S103的执行模块,在此不重复。

在本发明实施例提供一种文件下载装置,获取单元在接收到用户在应用程序中触发的对文件的下载请求时,可获取文件的长度,进而计算单元依据文件的长度和预设线程数计算文件的每个下载线程的数据长度和下载起止位置,从而下载单元在检测到线程池中存在空闲线程时,将文件的每个下载线程分配给空闲线程,依据计算的每个下载线程的数据长度和下载起止位置将应用程序对应的文件的每个下载线程的数据进行并行下载。

本发明实施例中,在线程池中支持多个线程并行下载,支持多个不同应用程序的文件的并行下载,同一应用程序的多个不同文件的并行下载,还支持同一文件的分段多线程并行下载,从而有效提升了移动终端资源的利用率,提高了带宽的有效利用率,提高了下载速度,增强了用户体验。

本发明实施例还公开了一种移动终端,包括图5所示的装置,该装置的结构和功能可参见图5所示实施例的相关描述,在此不赘述。在移动终端本端进行文件下载请求的输入、文件下载的处理和文件的存储。需要说明的是,本实施例提供的移动终端与图1~图4所示的文件下载方法相对应,为基于图1~图4所示的文件下载方法的执行主体。

本发明实施例还公开了一种文件下载系统,可包括移动终端设备和服务器。进一步的,文件的下载来源可来自于服务器,具体的,文件的来源可来自于文件内容对应的后台服务器、云服务器等。文件下载可存储于移动终端设备本地,也可以移动终端设备的存储卡中等,具体不受本发明实施例的限制。

用户通过在移动终端设备中触发文件的下载,用户通过移动终端中的屏幕、键盘等输入下载请求,进而在移动终端设备中运行本发明实施例提供的文件下载方法的程序,从而可对文件的下载请求进行处理,获取文件的长度,计算文件的各线程下载数据长度、下载起止位置,对多个线程进行并行下载,将下载的数据流写入移动终端设备的存储区中。

在本发明实施例中,文件下载装置的各单元可由相应的硬件或软件单元实现,各单元可以为独立的软、硬件单元,也可以集成为一个软、硬件单元,在此不用以限制本发明。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1