freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

計算機專業(yè)畢業(yè)論文)基于java的http斷點續(xù)傳的設計與實現(xiàn)(編輯修改稿)

2024-12-12 01:15 本頁面
 

【文章內容簡介】 MVC模式圖 (1) 由于本系統(tǒng)不是 WEB 編程所以頁面部分就沒有用到 JSP,用 swing 圖形界面所代替, 那么怎樣來實現(xiàn) MVC 編程呢? 系統(tǒng) MVC模型圖 (2) 下面 以 系統(tǒng) 中的 Dilog 包來 舉個列子來說明這個問題: 這是一個 Control 類 : package 。 import 。 public class StartDialog { private final DialogActionImpl dilogAction = new DialogAction()。 private final DialogGUIImpl dilogGUI = new DialogGUI()。 public StartDialog(JTable table) { (dilogAction)。 (table)。 } public void showDialog() { ()。 } public void setTable(JTable table) { SWING 包 中 的 類 , 例 如JButton,Jtable之類 實現(xiàn)包含 SWING 包的類 并實現(xiàn)了一個連接到 Controler 類的接口 連接到 Controler 類的接口,包含了獲取 SWING包的類 功能性代碼 實現(xiàn)功能代碼并實現(xiàn)了一個連接到 Controler類的接口 連接到 Controler 類的接口,并能提供功能代碼 這個是一個 Controler 類他的作用是負責把圖形界面和功能性代碼結合到一起,使之形成一個完成的模塊,實現(xiàn)了可插撥似接口 以接口為基礎連接Controler 以接口為基礎連接Controler (table)。 } } 其中的 dilogAction 和 dilogGUI 都是一個接口 根據(jù) JAVA 的多態(tài)性,使得可以用子類來賦值這兩個變量 ,那么上面的 MVC 模式變可實現(xiàn)。下面再看 DialogGUIImpl這一個類中的 addActionLiionner(dilogAction)方法。 public void addLiionner(final DialogActionImpl dilogAction) { (new ActionListener() { public void actionPerformed(ActionEvent e) { (impl)。 } })。 (new ActionListener() { public void actionPerformed(ActionEvent e) { (impl)。 } })。 (new ActionListener() { public void actionPerformed(ActionEvent e) { (impl)。 } })。 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { (impl)。 } })。 } 在這當中都是接口實現(xiàn)的功能 ,而且功能性代碼已經(jīng)被抽出到 Action 類當中去了,所以這樣在圖形編程的時候就不會再花太多時間去編寫功能代碼,而且能夠分工合作,讓圖形界面和功能代碼同步進行 。而且可以使代碼變得更加的清晰 。 同樣可以把 GUI 的工作和功能性代碼的工作區(qū)分開,達到可插拔的方式方便以后修改功能性代碼或者是 GUI的修改 ; 程序 設計原理分析 其實斷點續(xù)傳的原理很簡單,就是在 Http 的請求上和一般的下載有所不同而已。 打個比方,瀏覽器請求服務器上的一個文時,所發(fā)出的請求如下: 假設服務器域名為 ,文件名為 。 GET / HTTP/ Accept: image/gif, image/xxbitmap, image/jpeg, image/pjpeg, application/ excel, application/msword, application/, */* AcceptLanguage: zh AcceptEncoding: gzip, deflate UserAgent: Mozilla/ (patible。 MSIE 。 Windows NT ) Connection: KeepAlive 服務器收到請求后,按要求尋找請求的文件,提取文件的信息,然后返回給瀏覽器,返回信息如下: 200 ContentLength=106786028 AcceptRanges=bytes Date=Mon, 30 Apr 2020 11:46:21 GMT ETag=W/02ca57e173c11:95b ContentType=application/octetstream Server=MicrosoftIIS/ LastModified=Mon, 30 Apr 2020 11:46:21 GMT 所謂斷點續(xù)傳,也就是要從文件已經(jīng)下載的地方開始繼續(xù)下載。所以在客戶端瀏覽器傳給 Web 服務器的時候要多加一條信息 從哪里開始 。 下面是用自己編的一個 瀏覽器 來傳遞請求信息給 Web 服務器,要求從 1043070 字節(jié)開始。 GET / HTTP/ RANGE: bytes=1043070 Accept: text/html, image/gif, image/jpeg, *。 q=.2, */*。 q=.2 仔細看一下就會發(fā)現(xiàn)多了一行 RANGE: bytes=2020200 這一行的意思就是告訴服務器 這個文件從 2020200 字節(jié)開始傳,前面的字節(jié)不用傳了 。 服務器收到這個請求以后,返回的信息如下: 206 ContentLength=106786028 ContentRange=bytes 1043070106786027/106786028 Date=Mon, 30 Apr 2020 11:45:21 GMT ETag=W/02ca57e173c11:95b ContentType=application/octetstream Server=MicrosoftIIS/ LastModified=Mon, 30 Apr 2020 11:45:21 GMT 和前面服務器返回的信息比較一下,就會發(fā)現(xiàn)增加了一行: ContentRange=bytes 1043070106786027/106786028 , 返回的 代碼也改為 206了,而不再是 200 了 。 軟件模塊設計 功能設計 該軟件系統(tǒng)實現(xiàn)了以下的功能: ? 實現(xiàn)多線程下載,同一個任務可以開啟多個線程進行下載。 即在開啟任務的時候分配多個線程連接服務器,同時進行分塊下載,以實現(xiàn)最大化網(wǎng)絡資源的利用度 ? 實現(xiàn)下載中暫停功能,在下載過程中能夠暫停任務,并且在下次啟動的時候實現(xiàn)暫停位置繼續(xù)下載的功能,從而使得不再擔憂斷電或者是突然斷網(wǎng) 。 ? 實現(xiàn)刪除任務功能,刪除正在進行的任務或者是已經(jīng)完成的任務,當不再需要一個下載任務的時候可以通過該功能實現(xiàn)刪除 ? 實現(xiàn)下載文 件管理功能,對下載下來的任務進行分類管理,關聯(lián)到絕對路徑 ,使用戶可以清晰地看到任務 保存位置 。 功能 模塊 設計 根據(jù)面向對象的思想 和上面的設計模式 把模塊分為:圖形化界面類,功能模塊類,核心類 。 包含的類如下圖 : 源碼結構圖 為核心類 包 ,實現(xiàn) HTTP 斷點續(xù)傳 ,是本系統(tǒng)的核心部分所在,外界向他傳輸一個變量,那么就可以實現(xiàn)多任務多線程下載 ; 為軟件記錄數(shù)據(jù)包,包括下載 數(shù)據(jù)和軟件設置數(shù)據(jù) ,數(shù)據(jù)包主要保存任務的屬性,比如開始時間,結束時間,文件長度,名字以及大小 ; 為用戶體驗對話框 的包, 包括 UI 和功能模塊 ,主要包括啟動任務,對任務名字進行輸入 ,保存地址進行輸入 ; 為用戶體驗主界面的包 ,包括 UI和功能模塊 ,主要包括了一個 Tree 樹 , 一個顯示詳細信息的 JTabPanle,一個任務進度顯示的 JTable; 為用戶體驗主界面的菜單 欄包,包括 UI和功能模塊, 有新建任務選項 ,點擊可開啟新建任務 ; 為用戶體驗主界面的表格包,包括 UI 和功能模塊,重新渲染表格的一 列 使其顯示 成 JProgress。 的皮膚包,重繪 JButton,Jpanel使圖形化更美觀 。 為界面顯示的下載任務和已下載任務列表,通過添加 監(jiān)聽實現(xiàn)表格互相切換。 5. 系統(tǒng) 設計與 實現(xiàn) 多線程任務下載 設計 任務 啟動 線程 設計 在 這個包中有的 SiteFileFetch 類是啟動任務線程的類,它實現(xiàn)的功能是獲取文件長度,判斷是否能進行 HTTP 斷點續(xù)傳 ,以及讀寫文件 。 public SiteFileFetch(String url, String fileName, String srcPath, int chunk) { = new DownloadData(url, fileName, srcPath)。 String tmpName[] = (\\p{Punct})。 tmpFile = new File(() + + tmpName[0])。 if (!()) { startPoints = new long[chunk]。 endPoints = new long[chunk]。 try { createFile(false)。 } catch (IOException e) { (創(chuàng)建臨時文件出錯 )。 } } else { bFirst = false。 readFilePoint()。 } 上面這段代碼是為正在進行的任務創(chuàng)建臨時信息, 臨時信息為總線程數(shù),以及每個線程下載開始和結束的位置,同時通過查找臨時文件判斷此任務是否為第一次下載 。 private void readFilePoint() { try { // 輸入 流, 從臨時文件中讀取指針位置 DataInputStream input = new DataInputStream(new FileInputStream( tmpFile))。 // 讀取第一個 int類型數(shù)據(jù) ,保存的內容 為 : 起始位置 int nCount = ()。 startPoints = new long[nCount]。 endPoints = new long[nCount]。 for (int i = 0。 i 。 i++) { startPoints[i] = ()。 endPoints[i] = ()。 } ()。 } catch (IOException e) { ()。 } catch (Exception e) { ()。 } } 這段代碼是讀取臨時文件夾的信息,以初始化線程,以便分配任務 ,在讀取的第一個int 類型數(shù)據(jù),表示線程的個數(shù),其后每兩個數(shù)據(jù)為一組,前面的一個數(shù)據(jù)表示該子線程開始的位置 ,后面的一個數(shù)據(jù)表示該線程結束的位置。 private void writeFilePoint() { try { DataOutputStream out = new DataOutputStream(new FileOutputStream( tmpFile))。 ()。 for (int i = 0。 i 。 i++) { // (nPos[i])。 (fileSplitters[i].getStartPoints())。 (fileSplitters[i].getEndPoint())。 } ()。 } catch (IOException e) { ()。 } catch (Exception e) { ()。 } } 這是向臨時文件中寫數(shù)據(jù) 的函數(shù), 根據(jù)上面的讀取函數(shù)可以知道,第一個 writeInt(),是向文件中寫入線程數(shù),也就是 startPoints的數(shù)組長度, 后面的 for 循環(huán)是把每個位置的數(shù)據(jù)中的指向位置寫到文件中去 。 同時這個類 實現(xiàn)了 Runable 接口,那么這樣就可以做為線程任務,開啟多個任務 。 其Run()函數(shù)的內容為: public void run() { boolean erro = false。 boolean isHTTP = true。 if (bFirst) { /
點擊復制文檔內容
公司管理相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1