資源描述:
《簡單多線程下載工具的設(shè)計與實現(xiàn) - 威客中國》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、多線程下載工具的設(shè)計2.3可行性分析可行性研究實質(zhì)上是要進行一次大大壓縮簡化了的系統(tǒng)分析和設(shè)計的過程,也就是在較高層次上以較抽象的方式進行的系統(tǒng)分析和設(shè)計的過程。它的目的不是解決問題,而是確定問題是否值得去解決。2.3.1技術(shù)可行性分析通過根據(jù)軟件的需求,對本設(shè)計的技術(shù)實現(xiàn)進行全面的了解,可以采用java的多線程機制,通過設(shè)置HTTP1.1的請求頭信息,可以實現(xiàn)連接遠程資源的指定偏移位置,通過這個特性我們就可以實現(xiàn)多線程及斷點續(xù)傳的功能。所以根據(jù)目前已知的技術(shù),在技術(shù)上實現(xiàn)多線程下載沒有問題。2.3.2經(jīng)濟可行性分析從開發(fā)這個簡單多線程的意義上我們可以看出,贏利不是制作這個下載工具的
2、目的,而只是為了單純的探索多線程下載的基本原理,綜合運用所學(xué)的知識,提高自己的動手能力,及查閱資料繼續(xù)學(xué)習(xí)的能力。所以它也就不存在經(jīng)濟的問題。而從它的意義上來說,絕對值得制作這個下載工具。2.3.3操作可行性分析由于這個多線程下載工具所面向的是廣大的互聯(lián)網(wǎng)用戶,所以在設(shè)計中采用簡潔的GUI界面。也因為簡潔的界面設(shè)計使得系統(tǒng)在操作方式上很容易讓用戶接受。在操作上對一沒有計算機操作經(jīng)驗的人來說也不會有難度,因此在操作上也是行得通的。3.概要設(shè)計3.1系統(tǒng)結(jié)構(gòu)圖本系統(tǒng)采用現(xiàn)今比較流行的三層結(jié)構(gòu)進行系統(tǒng)分層,這三層分別為GUI表現(xiàn)層,控制層,底層下載操作,文件及網(wǎng)絡(luò)操作,系統(tǒng)的結(jié)構(gòu)圖如圖3-
3、1圖3-1系統(tǒng)結(jié)構(gòu)圖3.2功能流程圖新建下載及恢復(fù)下載功能流程圖見圖3-2,在這里新建任務(wù)與恢復(fù)任務(wù)僅是在任務(wù)的構(gòu)建方式上不一樣,在網(wǎng)絡(luò)操作及下載操作上都沒有什么區(qū)別,這樣的實現(xiàn)主要得益于對代碼重用性的設(shè)計。圖3-2新建/恢復(fù)任務(wù)流程圖暫停與停止的功能實現(xiàn)流程圖見圖3-3,從這個圖中我們可以發(fā)現(xiàn)和新建任務(wù),恢復(fù)任務(wù)一樣具備同樣的代碼利用,停止線程過程是同一個,他們兩個在功能上不同僅是暫停任務(wù)時我們需要將暫停的斷點記錄下來,而停止任務(wù)卻是將斷點記錄給刪除,并刪除已下載的部分文件信息。圖3-3暫停/停止任務(wù)流程圖4.詳細設(shè)計4.1獲取網(wǎng)絡(luò)資源獲取網(wǎng)絡(luò)資源是下載過程中的第一個步驟,也是很關(guān)
4、鍵的一步。由于網(wǎng)絡(luò)的問題是多變的,有可能指定的下載資源已經(jīng)不存在,或者網(wǎng)絡(luò)連接有問題,等一系列的問題,因些在連接資源過程中我們得對于相應(yīng)的連接進行相應(yīng)在測試,它是否可行,它的信息是否是我們想要的,這一節(jié)主要就是討論這個功能。4.1.1功能說明要下載一個遠程的資源就需我們能夠先定位到指定的資源,并建立連接。在本模塊中實現(xiàn)的基本功能說是與遠程的資源進行連接,并測試其連接狀態(tài)。4.1.2設(shè)計說明在做這個模塊之前我們得先來了解下HTTP協(xié)議。HTTP協(xié)議就是超文件傳輸協(xié)議,采用了請求/響應(yīng)模型??蛻舳讼蚍?wù)器發(fā)送一個請求,請求頭包含請求的方法、URI、協(xié)議版本、以及包含請求修飾符、客戶信息和
5、內(nèi)容的類似于MIME的消息結(jié)構(gòu)。服務(wù)器以一個狀態(tài)行作為響應(yīng),相應(yīng)的內(nèi)容包括消息協(xié)議的版本,成功或者錯誤編碼加上包含服務(wù)器信息、實體元信息以及可能的實體內(nèi)容。1、連接資源通過JDK的net包中包含的URL及HttpURLConnection兩個類對網(wǎng)上資源進行操作。URL指定網(wǎng)絡(luò)資源的位置,而HttpURLConnection中則封裝了操作指定網(wǎng)絡(luò)資源的方法。在本系統(tǒng)中我設(shè)計了類ConnectionManager,它的主要功能就是通過提供指定的URL獲取HttpURLConnection對象,為控制層代碼利用HttpURLConnection對象操作網(wǎng)絡(luò)文件提供支持??刂茖哟a只要調(diào)用
6、ConnectionManager.getConnection(URL)即可。2、測試連接在網(wǎng)絡(luò)連接過程中可能出現(xiàn)各種各樣的問題,而我們需要的只是連接成功的正確網(wǎng)絡(luò)資源,所以我們有必要對通過ConnectionManager獲取的與服務(wù)器的連接進行測試。如果測試成功,即能正確獲取到指定的資源,包括獲取是否支持斷點續(xù)傳的功能,之后我們才對指定的資源進行下載操作,否則拋棄信息,并對用戶進行相應(yīng)的提示。通過對HTTP1.1協(xié)議的了解,我們知道只要我們發(fā)送一個指定的請求頭信息,服務(wù)器就會返回一個攜帶著請求后服務(wù)器處理完成的信息,這個信息就包括請求是否成功等。我們要做的就是構(gòu)造這樣一個帶有指定
7、的請求的頭信息發(fā)送到服務(wù)器端,然后查看它返回的響應(yīng)碼,因為我們完成可能從響應(yīng)碼中去了解一個請求是否成功。要設(shè)計一個什么樣的請求頭才能符合我們的要求的測試效果呢?通過設(shè)計請求頭信息中的RANGE字段我們可以指定請求URL指向目標資源的偏移量,而不是從頭開始讀。這個也是斷點及多線程下載資源的一個重要屬性,我們將在后面作更詳細說明。如果我們設(shè)置完這個頭信息并發(fā)送到服務(wù)器端,如果源請求的資源存在并且服務(wù)器支持斷點續(xù)傳,這時它返回的響應(yīng)碼信息就是206,如果存在但不