本發(fā)明屬于計算機技術(shù)領(lǐng)域,尤其涉及一種文件下載方法及裝置。
背景技術(shù):
隨著無線通信網(wǎng)絡(luò)和互聯(lián)網(wǎng)的快速發(fā)展,移動終端設(shè)備普及率越來越高,越來越多的用戶通過移動終端設(shè)備從網(wǎng)絡(luò)下載文件,文件是存儲于儲存設(shè)備上的一段數(shù)據(jù)流,文件的大小影響下載時間的長短,文件大,下載時間長。
應(yīng)用程序(Application,縮寫為App)是安裝在移動終端設(shè)備中的第三方應(yīng)用程序,用戶通過應(yīng)用程序享用互聯(lián)網(wǎng)中的各種服務(wù),隨著用戶對應(yīng)用的需求增多,移動終端設(shè)備中同時運行的應(yīng)用程序也增多,而現(xiàn)有技術(shù)中在應(yīng)用程序中下載文件僅支持單線程下載,當(dāng)用戶有在移動終端設(shè)備中有多個下載文件的需求時,則依次下載,但會長期占用移動終端軟硬件資源且資源利用率低,又使得帶寬的有效利用率低,對用戶而言需等待下載完成方能下一步操作,降低了用戶體驗。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的在于提供一種文件下載方法及裝置,旨在解決由于現(xiàn)有技術(shù)中在移動終端設(shè)備中僅支持單線程下載文件,導(dǎo)致多文件下載時占用資源,資源利用率低、帶寬利用率低且用戶體驗差的問題。
一方面,本發(fā)明提供了一種文件下載方法,所述方法包括下述步驟:
在接收到用戶在應(yīng)用程序中觸發(fā)的對文件的下載請求時,由所述下載請求獲取所述文件的長度;
依據(jù)所述文件的長度和預(yù)設(shè)線程數(shù)計算所述文件的每個下載線程的數(shù)據(jù)長度和下載起止位置,所述文件對應(yīng)多個所述下載線程;
在檢測到線程池中存在空閑線程時,將所述文件的每個下載線程分配給所述空閑線程,依據(jù)所述計算的每個下載線程的數(shù)據(jù)長度和下載起止位置將所述應(yīng)用程序?qū)?yīng)的文件的每個下載線程的數(shù)據(jù)進行并行下載。
另一方面,本發(fā)明提供了一種文件下載裝置,所述裝置包括:
獲取單元,用于在接收到用戶在應(yīng)用程序中觸發(fā)的對文件的下載請求時,由所述下載請求獲取所述文件的長度;
計算單元,用于依據(jù)所述文件的長度和預(yù)設(shè)線程數(shù)計算所述文件的每個下載線程的數(shù)據(jù)長度和下載起止位置,所述文件對應(yīng)多個所述下載線程;
下載單元,用于在檢測到線程池中存在空閑線程時,將所述文件的每個下載線程分配給所述空閑線程,依據(jù)所述計算的每個下載線程的數(shù)據(jù)長度和下載起止位置將所述應(yīng)用程序?qū)?yīng)的文件的每個下載線程的數(shù)據(jù)進行并行下載。
在本發(fā)明實施例中,在接收到用戶在應(yīng)用程序中觸發(fā)的對文件的下載請求時,可獲取文件的長度,進而依據(jù)文件的長度和預(yù)設(shè)線程數(shù)計算文件的每個下載線程的數(shù)據(jù)長度和下載起止位置,從而在檢測到線程池中存在空閑線程時,將文件的每個下載線程分配給空閑線程,依據(jù)每個下載線程的下載起止位置將應(yīng)用程序?qū)?yīng)的文件的每個下載線程的數(shù)據(jù)進行并行下載。
實現(xiàn)了在移動終端設(shè)備中多線程下載文件,在線程池中支持多個線程并行下載,支持多個不同應(yīng)用程序的文件的并行下載,同一應(yīng)用程序的多個不同文件的并行下載,還支持同一文件的分段多線程并行下載,從而有效提升了移動終端資源的利用率,提高了帶寬的有效利用率,提高了下載速度,增強了用戶體驗。
附圖說明
圖1是本發(fā)明實施例一提供的文件下載方法的實現(xiàn)流程圖;
圖2是本發(fā)明實施例二提供的文件下載方法的程序流程圖;
圖3是本發(fā)明實施例三提供的文件下載方法的示意圖;
圖4是本發(fā)明實施例四提供的文件下載方法的實現(xiàn)流程圖;
圖5是本發(fā)明實施例五提供的文件下載裝置的結(jié)構(gòu)圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進行進一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明實施例中的文件下載方法及裝置可運行于移動終端設(shè)備中,其實,移動終端設(shè)備如智能手機、智能手表等。本發(fā)明實施例中的文件類型包括如文檔、音視頻、圖像、應(yīng)用程序等,還可以包括壓縮包等,具體不受本發(fā)明實施例的限制。
以下結(jié)合具體實施例對本發(fā)明的具體實現(xiàn)進行詳細(xì)描述:
實施例一:
圖1示出了本發(fā)明實施例一提供的文件下載方法的實現(xiàn)流程,為了便于說明,僅示出了與本發(fā)明實施例相關(guān)的部分,詳述如下:
S101,在接收到用戶在應(yīng)用程序中觸發(fā)的對文件的下載請求時,由下載請求獲取文件的長度。
作為一種可選的實施方式,用戶通過移動終端設(shè)備中的應(yīng)用程序觸發(fā)文件的下載,在接收到用戶在應(yīng)用程序中觸發(fā)的對文件的下載請求時,從下載請求的頭信息中獲取文件的長度(getContentLength())。進一步的,下載請求還包括文件的統(tǒng)一資源定位符URL,即下載地址。
進一步可選的,下載請求還可以包括應(yīng)用程序的應(yīng)用標(biāo)識,應(yīng)用標(biāo)識用于唯一標(biāo)識移動終端設(shè)備中安裝的應(yīng)用程序。進一步的,下載請求還可以包括文件標(biāo)識,文件標(biāo)識用于唯一標(biāo)識移動終端設(shè)備的應(yīng)用程序中下載的文件。
進一步可選的,可在數(shù)據(jù)庫中建立下載狀態(tài)表,用于存儲下載狀態(tài)信息,表項內(nèi)容可包括:_id(主鍵)、URL(下載鏈接)、taskId(線程標(biāo)識,如文件的下載線程編號)、downloadLength(該線程已下載的長度)、downloadSuccess(該線程是否下載完成的標(biāo)識)。
S102,依據(jù)文件的長度和預(yù)設(shè)線程數(shù)計算文件的每個下載線程的數(shù)據(jù)長度和下載起止位置,文件對應(yīng)多個下載線程。
作為一種可選的實施方式,文件可對應(yīng)多個下載線程,即將文件分段,每段對應(yīng)一個下載線程進行下載。由步驟S101獲取到文件的長度,而預(yù)設(shè)線程數(shù)為預(yù)先設(shè)置的一個文件對應(yīng)的下載的線程的數(shù)量,具體實現(xiàn)中,預(yù)設(shè)線程數(shù)可以為預(yù)設(shè)定值,如3,即一個文件由3個線程下載,進一步的,預(yù)設(shè)線程數(shù)還可以根據(jù)文件的大小進行設(shè)置。
進一步可選的,若在檢測到在文件的長度小于預(yù)設(shè)文件長度時,則預(yù)設(shè)線程數(shù)為預(yù)設(shè)定值。若在檢測到文件的長度大于預(yù)設(shè)文件長度時,則預(yù)設(shè)線程數(shù)為文件的長度除以預(yù)設(shè)線程區(qū)塊長度得到的數(shù)值。其中,預(yù)設(shè)文件長度為預(yù)先設(shè)置的文件長度,如50M等。預(yù)設(shè)線程區(qū)塊長度為預(yù)先設(shè)置的一個線程的下載長度,如3000字節(jié)等。
作為一種可選的實施方式,步驟S102中依據(jù)文件的長度和預(yù)設(shè)線程數(shù)計算文件的每個下載線程的數(shù)據(jù)長度和下載起止位置具體包括:
將文件的長度除以預(yù)設(shè)線程數(shù),得到文件的每個下載線程的數(shù)據(jù)長度;
由文件的每個下載線程的數(shù)據(jù)長度計算文件的每個線程的下載開始字節(jié)位置和下載結(jié)束字節(jié)位置;下載起止位置包括:下載開始字節(jié)位置和下載結(jié)束字節(jié)位置。
具體實現(xiàn)中,通過設(shè)置Http的Range頭字段指定每個下載線程的下載起止位置,具體的,即每個下載線程從文件的什么位置開始下載,下載到什么位置為止,如文件1包括3個線程,文件1共3000字節(jié),每個線程下載1000字節(jié),則文件1的下載線程1在http請求頭中設(shè)置為:“Range:bytes=0-999”,文件1的下載線程2在http請求頭中設(shè)置為:“Range:bytes=1000-2000”,文件1的下載線程3在http請求頭中設(shè)置為:“Range:bytes=2001-3000”。
S103,在檢測到線程池中存在空閑線程時,將文件的每個下載線程分配給空閑線程,依據(jù)計算的每個下載線程的數(shù)據(jù)長度和下載起止位置將應(yīng)用程序?qū)?yīng)的文件的每個下載線程的數(shù)據(jù)進行并行下載。
作為一種可選的實施方式,線程池中包括多個線程可供下載。若該文件的下載請求為首次請求,則在下載列表中檢測到該文件的URL不存在,則在檢測到線程池中存在空閑線程時將文件的每個下載線程分配給空閑線程,進而進行并行下載。若該文件的下載請求不是首次請求,則在下載列表中檢測到該文件的URL存在,則計算已下載的數(shù)據(jù)長度,并根據(jù)已下載的數(shù)據(jù)長度更新下載線程的起止位置。
具體實現(xiàn)中,可在本地創(chuàng)建文件,用于下載文件,并設(shè)置該創(chuàng)建的文件的大小,本地創(chuàng)建的文件的大小與待下載的文件的長度相同。
具體的,依據(jù)計算的每個下載線程的數(shù)據(jù)長度和下載起止位置將應(yīng)用程序?qū)?yīng)的文件的每個下載線程的數(shù)據(jù)進行并行下載具體包括:
依據(jù)文件的每個下載線程的下載起止位置將文件的每個下載線程的數(shù)據(jù)并行寫入存儲區(qū)。
具體實現(xiàn)中,可通過RandomAccessFile類指定每個線程從存儲區(qū)的具體位置開始寫入數(shù)據(jù),具體如下載網(wǎng)絡(luò)文件的指定起止位置到本地文件的起止位置通過RandomAccessFile類實現(xiàn),該類可通過seek方法指定輸入流寫入的位置。其中,存儲區(qū)包括移動終端設(shè)備本身的存儲空間、存儲卡等。
作為一種可選的實施方式,本發(fā)明實施例中支持多線程并行下載,其中,多線程不局限于一個文件的多線程下載,還支持多個文件多線程下載,還支持來自不同應(yīng)用程序的多個文件的多線程下載。
進一步可選的,下載完成后,在下載狀態(tài)表中更新各個線程對應(yīng)的表項內(nèi)容,如將downloadSuccess標(biāo)識為已完成。
在本發(fā)明實施例中,在接收到用戶在應(yīng)用程序中觸發(fā)的對文件的下載請求時,可獲取文件的長度,進而依據(jù)文件的長度和預(yù)設(shè)線程數(shù)計算文件的每個下載線程的數(shù)據(jù)長度和下載起止位置,從而在檢測到線程池中存在空閑線程時,將文件的每個下載線程分配給空閑線程,依據(jù)計算的每個下載線程的數(shù)據(jù)長度和下載起止位置將應(yīng)用程序?qū)?yīng)的文件的每個下載線程的數(shù)據(jù)進行并行下載。
實現(xiàn)了在移動終端設(shè)備中多線程下載文件,在線程池中支持多個線程并行下載,支持多個不同應(yīng)用程序的文件的并行下載,同一應(yīng)用程序的多個不同文件的并行下載,還支持同一文件的分段多線程并行下載,從而有效提升了移動終端資源的利用率,提高了帶寬的有效利用率,提高了下載速度,增強了用戶體驗。
實施例二:
圖2示出了本發(fā)明實施例二提供的文件下載方法的程序流程圖,為一個文件進入下載時的程序流程圖,包括步驟S201~S209,詳述如下:
S201,接收用戶在應(yīng)用程序中觸發(fā)的對文件的下載請求。下載請求包括文件的URL。
S202,獲取文件的長度并計算文件的每個下載線程的下載起止位置。
S203,判斷文件的URL是否在下載列表中。若是,執(zhí)行步驟S204,若否,執(zhí)行步驟S205。
S204,將每個下載線程的下載起止位置加上各線程已下載的數(shù)據(jù)長度。
S205,判斷線程池中是否存在空閑線程。若是,執(zhí)行步驟S207,若否執(zhí)行步驟S206。
S206,進入下載線程等待序列。
S207,將文件的每個下載線程分配給空閑線程,并進行并行下載。
S208,每個下載線程下載完成后,更新該下載線程的狀態(tài)。
S209,檢測到該文件的所有線程下載結(jié)束后,刪除該文件的URL。
具體實現(xiàn)中,在接收到用戶觸發(fā)的下載請求后,從請求頭中獲取到文件的長度以及文件的URL,進而根據(jù)文件的長度和預(yù)設(shè)線程數(shù)計算文件的每個下載線程的數(shù)據(jù)長度,具體可將文件的長度除以預(yù)設(shè)線程數(shù),得到文件的每個下載線程的數(shù)據(jù)長度。進而由文件的每個下載線程的數(shù)據(jù)長度計算文件的每個線程的下載開始字節(jié)位置和下載結(jié)束字節(jié)位置。
若檢測到文件的URL在下載列表中,則需更新對應(yīng)線程的下載起止位置,具體的,將步驟S202中計算得到的線程的下載起止位置加上對應(yīng)線程已經(jīng)下載的數(shù)據(jù)長度,進而得到更新的線程的下載起止位置。若URL不在下載列表中,則直接進行步驟S205。
在檢測到線程池中不存在空閑線程時,則將文件對應(yīng)的下載線程進入下載線程等待序列,返回不在S206。
在檢測到線程池中存在空閑線程時,則將文件的每個下載線程分配給空閑線程,進行并行下載。當(dāng)每個下載線程下載完成后,在下載狀態(tài)表中更新各個線程對應(yīng)的表項內(nèi)容,如將downloadSuccess標(biāo)識為已完成。
在檢測到該文件的所有線程下載結(jié)束后,刪除該文件的URL,具體將已全部下載完成的URL從下載列表中刪除。
本發(fā)明實施例提供的文件下載方法,可對已下載的線程片段進行自動疊加,避免重復(fù)下載浪費資源,同時支持多線程并行下載,多線程不局限于一個文件的多線程下載,還支持多個文件多線程下載,從而有效提升了移動終端資源的利用率,提高了帶寬的有效利用率,提高了下載速度,增強了用戶體驗。
實施例三:
圖3示出了本發(fā)明實施例三提供的文件下載方法的示意圖,其中,(a)為一個應(yīng)用對應(yīng)多個文件的下載方法示意圖,(b)為多個應(yīng)用對應(yīng)的文件下載方法示意圖。
如圖3(a)所示,用戶在應(yīng)用中下載4個文件,假如文件1、2、3、4是先后觸發(fā)的下載請求,每個文件分為3個線程,設(shè)定此時線程池中最多允許并行下載10個線程,則文件1、文件2、文件3的全部線程可進入下載,文件4的線程1進入下載,文件4的線程2和文件4的線程3進入等待序列,待有空閑線程時再進入下載。
具體文件如何分為3個線程的方法參見實施例1中詳述,在此不重復(fù)。對于一個文件分為多線程下載,可大大提升了下載速度,使得移動終端設(shè)備的資源得以充分利用。而對用戶可見的下載進度可顯示為一個文件的進度,一個文件的各個線程的下載進度可對用戶隱藏。
如圖3(b)所示,用戶在應(yīng)用1中下載文件1,在應(yīng)用2中下載文件2和文件3,在應(yīng)用3中下載文件4,假如文件1、2、3、4是先后觸發(fā)的下載請求,每個文件分為3個線程,設(shè)定此時線程池中最多允許并行下載10個線程,則文件1、文件2、文件3的全部線程可進入下載,文件4的線程1進入下載,文件4的線程2和文件4的線程3進入等待序列,待有空閑線程時再進入下載。
具體文件如何分為3個線程的方法參見實施例1中詳述,在此不重復(fù)。下載請求中可包括應(yīng)用程序的應(yīng)用標(biāo)識、文件的文件標(biāo)識、URL等,同時還可對文件的每個線程進行編號,得到每個文件的線程標(biāo)識,對于一個移動終端設(shè)備中可同時下載來自不同應(yīng)用程序的文件,對具體的每一個文件又可以分為多線程下載,可大大提升下載速度,使得設(shè)備的資源得以充分利用。
實施例四:
圖4示出了本發(fā)明實施例四提供的文件下載方法的實現(xiàn)流程圖,包括步驟S401~S409,詳述如下:
S401,接收到多個下載請求,為用戶在多個應(yīng)用程序中觸發(fā)的對應(yīng)用標(biāo)識對應(yīng)的文件的下載請求。
作為一種可選的實施方式,可以理解為同時收到多個下載請求,或者在極短的時間內(nèi)收到多個下載請求。具體的,用戶在多個應(yīng)用程序中觸發(fā)的對文件的下載請求,即應(yīng)用標(biāo)識對應(yīng)的文件的下載請求。具體實現(xiàn)中,下載請求中包括應(yīng)用程序的應(yīng)用標(biāo)識,進一步的,還包括文件的URL。更進一步的,還可以包括文件的文件標(biāo)識。
S402,獲取各個應(yīng)用標(biāo)識對應(yīng)的文件的長度。
作為一種可選的實施方式,計算每個應(yīng)用標(biāo)識對應(yīng)的文件的長度。具體可從下載請求的頭信息中獲取文件的長度。一個應(yīng)用標(biāo)識可以對應(yīng)至少一個文件。
S403,計算各個應(yīng)用標(biāo)識對應(yīng)的各個下載線程的下載起止位置。
作為一種可選的實施方式,計算每個應(yīng)用標(biāo)識對應(yīng)的各個文件的各個下載線程的下載起止位置,具體的,將文件的長度除以預(yù)設(shè)線程數(shù),得到文件的每個下載線程的數(shù)據(jù)長度;或者由文件的每個下載線程的數(shù)據(jù)長度計算文件的每個線程的下載開始字節(jié)位置和下載結(jié)束字節(jié)位置。其中,若在檢測到在文件的長度小于預(yù)設(shè)文件長度時,則預(yù)設(shè)線程數(shù)為預(yù)設(shè)定值。若在檢測到文件的長度大于預(yù)設(shè)文件長度時,則預(yù)設(shè)線程數(shù)為文件的長度除以預(yù)設(shè)線程區(qū)塊長度得到的數(shù)值。
S404,判斷線程池中是否存在空閑線程。若是,執(zhí)行步驟S406,若否執(zhí)行步驟S405。
S405,進入下載線程等待序列。
S406,計算空閑線程的數(shù)量和應(yīng)用標(biāo)識對應(yīng)的下載線程的數(shù)量。
作為一種可選的實施方式,計算空閑線程的數(shù)量,進一步的,計算應(yīng)用標(biāo)識對應(yīng)的下載線程的數(shù)量,如圖3(b)所示,則應(yīng)用1的下載線程的數(shù)量為3,應(yīng)用2的下載線程的數(shù)量為6,應(yīng)用3的下載線程的數(shù)量為3。
S407,判斷應(yīng)用標(biāo)識對應(yīng)的下載線程的數(shù)量與空閑線程的數(shù)量的差值是否大于0,若是執(zhí)行步驟S409,若否執(zhí)行步驟S408。
作為一種可選的實施方式,計算應(yīng)用標(biāo)識對應(yīng)的下載線程的數(shù)量與空閑線程的數(shù)量的差值,并判斷該差值是否大于0。即判斷線程池中能否滿足多個應(yīng)用的多線程下載請求。
S408,將應(yīng)用標(biāo)識對應(yīng)的全部下載線程的數(shù)據(jù)進行并行下載。
作為一種可選的實施方式,在步驟S407中的判斷結(jié)果為否時,即應(yīng)用標(biāo)識對應(yīng)的下載線程的數(shù)量與空閑線程的數(shù)量的差值不大于0,即應(yīng)用標(biāo)識對應(yīng)的下載線程的數(shù)量小于或等于空閑線程的數(shù)量時,應(yīng)用標(biāo)識對應(yīng)的全部下載線程的數(shù)據(jù)可進行并行下載。
S409,依據(jù)應(yīng)用標(biāo)識對應(yīng)的文件優(yōu)先級將應(yīng)用標(biāo)識對應(yīng)的文件的下載線程分配給空閑線程并進行并行下載。
作為一種可選的實施方式,在步驟S407中的判斷結(jié)果為是時,即應(yīng)用標(biāo)識對應(yīng)的下載線程的數(shù)量與空閑線程的數(shù)量的差值大于0,即應(yīng)用標(biāo)識對應(yīng)的下載線程的數(shù)大于空閑線程的數(shù)量時,依據(jù)應(yīng)用標(biāo)識對應(yīng)的文件優(yōu)先級將應(yīng)用標(biāo)識對應(yīng)的文件的下載線程分配給空閑線程并進行并行下載。
其中,不同的應(yīng)用標(biāo)識可對應(yīng)不同的文件優(yōu)先級,在線程有限情況下,優(yōu)先滿足優(yōu)先級高的文件的下載。具體的,如可根據(jù)文件的長度來設(shè)定優(yōu)先級γ,文件長度(ρl)越大優(yōu)先級越小,文件長度越小優(yōu)先級越高,γ=1/ρl。進一步的,還可以根據(jù)應(yīng)用的優(yōu)先級來設(shè)定文件的下載優(yōu)先級,應(yīng)用的優(yōu)先級高則文件的下載優(yōu)先級也高,應(yīng)用的優(yōu)先級低則文件的下載優(yōu)先級也低。進一步的,還可采用先來先服務(wù)(First-come-First-Service,F(xiàn)CFS)的方式進行處理,下載請求的觸發(fā)時間越早優(yōu)先級越高,γ=ρt。進一步的,還可以根據(jù)文件的類型設(shè)定文件的下載優(yōu)先級,如設(shè)置優(yōu)先級由高到低分別為:文檔—應(yīng)用程序—音視頻,則依據(jù)文檔類型的優(yōu)先級進行文件的下載,文檔類型的優(yōu)先級高的優(yōu)先下載,文檔類型的優(yōu)先級低的其下載優(yōu)先級也低。
本發(fā)明實施例提供文件的下載方法,實現(xiàn)了多個下載請求情況下的并行下載,支持多個應(yīng)用的多個文件的多線程下載。當(dāng)出現(xiàn)空閑線程數(shù)量不夠時,而文件的下載需求多時,可根據(jù)應(yīng)用標(biāo)識對應(yīng)的文件優(yōu)先級進行并行下載。多線程不局限于一個文件的多線程下載,還支持多個文件多線程下載,支持多個應(yīng)用中的多文件多線程下載,從而有效提升了移動終端資源的利用率,提高了帶寬的有效利用率,提高了下載速度,增強了用戶體驗。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲于一計算機可讀取存儲介質(zhì)中,所述的存儲介質(zhì),如ROM/RAM、磁盤、光盤等。
實施例五:
圖5示出了本發(fā)明實施例五提供的文件下載裝置的結(jié)構(gòu),為了便于說明,僅示出了與本發(fā)明實施例相關(guān)的部分,其中,本發(fā)明實施例提供的裝置可包括:獲取單元51、計算單元52以及下載單元53。
獲取單元51,用于在接收到用戶在應(yīng)用程序中觸發(fā)的對文件的下載請求時,由下載請求獲取文件的長度。
作為一種可選的實施方式,獲取單元51在接收到用戶在應(yīng)用程序中出發(fā)的對文件的下載請求時,從下載請求的頭信息中獲取文件的長度(getContentLength())。進一步的,下載請求還包括文件的URL,即下載地址。
進一步可選的,下載請求還可以包括應(yīng)用程序的應(yīng)用標(biāo)識,應(yīng)用標(biāo)識用于唯一標(biāo)識移動終端設(shè)備中安裝的應(yīng)用程序。進一步的,下載請求還可以包括文件標(biāo)識,文件標(biāo)識用于唯一標(biāo)識移動終端設(shè)備的應(yīng)用程序中下載的文件。
計算單元52,用于依據(jù)獲取單元51中獲取的文件的長度和預(yù)設(shè)線程數(shù)計算文件的每個下載線程的數(shù)據(jù)長度和下載起止位置,文件對應(yīng)多個下載線程。
作為一種可選的實施方式,文件可對應(yīng)多個下載線程,即將文件分段,每段對應(yīng)一個下載線程進行下載。進一步可選的,文件的長度小于預(yù)設(shè)文件長度時,預(yù)設(shè)線程數(shù)為預(yù)設(shè)定值;文件的長度大于預(yù)設(shè)文件長度時,預(yù)設(shè)線程數(shù)為文件的長度除以預(yù)設(shè)線程區(qū)塊長度得到的數(shù)值。
下載單元53,用于在檢測到線程池中存在空閑線程時,將文件的每個下載線程分配給空閑線程,依據(jù)計算單元52計算的每個下載線程的數(shù)據(jù)長度和下載起止位置將應(yīng)用程序?qū)?yīng)的文件的每個下載線程的數(shù)據(jù)進行并行下載。
進一步可選的,計算單元52還可以包括:長度計算子單元和位置計算子單元,其中:
長度計算子單元,用于將文件的長度除以預(yù)設(shè)線程數(shù),得到文件的每個下載線程的數(shù)據(jù)長度;
位置計算子單元,用于由文件的每個下載線程的數(shù)據(jù)長度計算文件的每個線程的下載開始字節(jié)位置和下載結(jié)束字節(jié)位置;下載起止位置包括:下載開始字節(jié)位置和下載結(jié)束字節(jié)位置;
進一步的,下載單元53具體用于:依據(jù)文件的每個下載線程的下載起止位置將文件的每個下載線程的數(shù)據(jù)并行寫入存儲區(qū)。
進一步可選的,計算單元52具體用于:在檢測到文件的URL在下載列表中時,獲取文件已下載的數(shù)據(jù)大小,并根據(jù)獲取的所述文件已下載的數(shù)據(jù)的大小更新文件的每個線程的下載起止位置。其中,下載請求包括文件的統(tǒng)一資源定位符URL。
進一步可選的,下載請求包括應(yīng)用程序的應(yīng)用標(biāo)識;下載請求為多個,且為用戶在多個應(yīng)用程序中觸發(fā)的對應(yīng)用標(biāo)識對應(yīng)的文件的下載請求時,計算單元52還可以包括:線程數(shù)量計算子單元。其中:
線程數(shù)量計算子單元,用于計算應(yīng)用標(biāo)識對應(yīng)的下載線程的數(shù)量;
線程數(shù)量計算子單元,還用于計算空閑線程的數(shù)量;
進一步的,下載單元53包括:第一下載子單元和第二下載子單元。
第一下載子單元,用于在應(yīng)用標(biāo)識對應(yīng)的文件的下載線程的數(shù)量小于或等于空閑線程的數(shù)量時,將應(yīng)用標(biāo)識對應(yīng)的全部下載線程的數(shù)據(jù)進行并行下載;
第二下載子單元,用于在應(yīng)用標(biāo)識對應(yīng)的文件的下載線程的數(shù)量大于空閑線程的數(shù)量時,依據(jù)應(yīng)用標(biāo)識對應(yīng)的文件優(yōu)先級將應(yīng)用標(biāo)識對應(yīng)的文件的下載線程分配給空閑線程并進行并行下載。
進一步的,獲取單元51、計算單元52以及下載單元53的執(zhí)行細(xì)節(jié)可參見實施例一,分別對應(yīng)實施例一中步驟S101、步驟S102、步驟S103的執(zhí)行模塊,在此不重復(fù)。
在本發(fā)明實施例提供一種文件下載裝置,獲取單元在接收到用戶在應(yīng)用程序中觸發(fā)的對文件的下載請求時,可獲取文件的長度,進而計算單元依據(jù)文件的長度和預(yù)設(shè)線程數(shù)計算文件的每個下載線程的數(shù)據(jù)長度和下載起止位置,從而下載單元在檢測到線程池中存在空閑線程時,將文件的每個下載線程分配給空閑線程,依據(jù)計算的每個下載線程的數(shù)據(jù)長度和下載起止位置將應(yīng)用程序?qū)?yīng)的文件的每個下載線程的數(shù)據(jù)進行并行下載。
本發(fā)明實施例中,在線程池中支持多個線程并行下載,支持多個不同應(yīng)用程序的文件的并行下載,同一應(yīng)用程序的多個不同文件的并行下載,還支持同一文件的分段多線程并行下載,從而有效提升了移動終端資源的利用率,提高了帶寬的有效利用率,提高了下載速度,增強了用戶體驗。
本發(fā)明實施例還公開了一種移動終端,包括圖5所示的裝置,該裝置的結(jié)構(gòu)和功能可參見圖5所示實施例的相關(guān)描述,在此不贅述。在移動終端本端進行文件下載請求的輸入、文件下載的處理和文件的存儲。需要說明的是,本實施例提供的移動終端與圖1~圖4所示的文件下載方法相對應(yīng),為基于圖1~圖4所示的文件下載方法的執(zhí)行主體。
本發(fā)明實施例還公開了一種文件下載系統(tǒng),可包括移動終端設(shè)備和服務(wù)器。進一步的,文件的下載來源可來自于服務(wù)器,具體的,文件的來源可來自于文件內(nèi)容對應(yīng)的后臺服務(wù)器、云服務(wù)器等。文件下載可存儲于移動終端設(shè)備本地,也可以移動終端設(shè)備的存儲卡中等,具體不受本發(fā)明實施例的限制。
用戶通過在移動終端設(shè)備中觸發(fā)文件的下載,用戶通過移動終端中的屏幕、鍵盤等輸入下載請求,進而在移動終端設(shè)備中運行本發(fā)明實施例提供的文件下載方法的程序,從而可對文件的下載請求進行處理,獲取文件的長度,計算文件的各線程下載數(shù)據(jù)長度、下載起止位置,對多個線程進行并行下載,將下載的數(shù)據(jù)流寫入移動終端設(shè)備的存儲區(qū)中。
在本發(fā)明實施例中,文件下載裝置的各單元可由相應(yīng)的硬件或軟件單元實現(xiàn),各單元可以為獨立的軟、硬件單元,也可以集成為一個軟、硬件單元,在此不用以限制本發(fā)明。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。