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

正文內(nèi)容

基于http的多線程下載器畢業(yè)論文(參考版)

2025-07-06 20:16本頁(yè)面
  

【正文】 i++) { //將下載任務(wù)信息還原成 D。 for (int i = 0。 (fis)。 // 創(chuàng)建文件輸入流 fis = new FileInputStream(new File(E:/Workspaces/Eclipse/FinishDownload/properties/))。 } catch (IOException e) { } } 當(dāng)系統(tǒng)啟動(dòng)時(shí) ,從文件中導(dǎo)入未完成下載任務(wù)。 i=1。 i ()。 (count, + ())。 } catch (FileNotFoundException e) { ()。 LoadProperty 流程圖如圖 所示: 系 統(tǒng) 關(guān) 閉系 統(tǒng) 打 開(kāi)保 存 未 完 成 下 載 信息導(dǎo) 出 未 完 成 下 載 任務(wù)開(kāi) 始下 載 器 監(jiān) 聽(tīng) 事 件 圖 LoadProperty 流程 圖 LoadProperty 模塊實(shí)現(xiàn) 當(dāng)系統(tǒng)退出時(shí) ,保存未完成下載信息,關(guān)鍵代碼如下: public static void saveDowningInfo() { FileOutputStream fos = null。 } } } LoadProperty 模塊設(shè)計(jì) 模塊流程分析 簡(jiǎn)單來(lái)說(shuō)可以劃分為兩個(gè)子模塊:保存信息模塊和加載信息模塊。 //將讀取內(nèi)容寫(xiě)入文件 (b, 0, len)。amp。amp。 //將下載起始點(diǎn)定位到新的起始點(diǎn) ( + )。 int len = 0。 = new BufferedInputStream(())。 String bytes= bytes=+(+)++。 關(guān)鍵代碼如下: //進(jìn)入時(shí)判斷線程是否結(jié)束 if (!) { openCon = ()。 //bytes為一個(gè)字符串: bytes=+(+)+ 。 } DownloadThread 模塊的設(shè)計(jì) DownloadThread 模塊主要用于進(jìn)行具體下載的操作,如創(chuàng)建每個(gè)線程對(duì)目的文件連接,設(shè)定每個(gè)線程不同時(shí)刻的下載開(kāi)始點(diǎn)和結(jié)束點(diǎn),同時(shí)對(duì) I/O 流進(jìn)行操作,及時(shí)存儲(chǔ)文件的下載信息。i++){ if([i].isComplete==true){ ++。 for(int i=0。 } 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 29 return 。i。 關(guān)鍵代碼如下: //計(jì)算已完成下載量 public long calculateCompleted(){ =0。i++){ //調(diào)用線程的 start 方法啟動(dòng)下載 new Thread([i]).start()。 } } } 啟動(dòng) 線程的下載 ,關(guān)鍵代碼如下: //開(kāi)始下載 public void beginDownload(){ for(int i=0。 }else{ //分配每個(gè)線程的下載起始點(diǎn)和結(jié)束點(diǎn) [i]=new DownloadThread(this, i, i*dataLen, i*dataLen+dataLen,ran_i)。 try { //構(gòu)建文件輸入流 ran_i=new RandomAccessFile(, rw)。i。 // 獲得線程每塊下載大小 long dataLen=+1。 } } 創(chuàng)建線程并分配每個(gè)線程下載塊:根據(jù)用戶選定的下載線程數(shù)創(chuàng)建等量的下載線程并分配每個(gè)線程下載塊的大小。 } } catch (IOException e) { (this, false,response,length)。//啟動(dòng)線程 setStatus()。 [0]=new DownloadThread(this, 0, , 0, ,rand)。 RandomAccessFile rand=null。 if(response==200){ //選擇單線程下載 =1。//獲得資源大小 =()。 //設(shè)置請(qǐng)求頭 Range,用于分塊下載數(shù)據(jù) (Range, bytes=0)。關(guān)鍵代碼如下: try { URLConnection openCon=()。 Download 模塊流程圖如圖 所示: 開(kāi) 始 下 載獲 得 資 源 的 網(wǎng) 絡(luò) 連接 和 響 應(yīng) 碼響 應(yīng) 碼 為 2 0 0響 應(yīng) 碼 為 2 0 6否單 線 程 下 載是響 應(yīng) 碼 錯(cuò) 誤 , 取 消下 載否分 配 線 程啟 動(dòng) 下 載 線 程開(kāi) 始 下 載實(shí) 時(shí) 設(shè) 定 表 格 中 下載 任 務(wù) 的 狀 態(tài)下 載 結(jié) 束 / 暫 停 圖 Download 流程圖 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 27 模塊詳細(xì)設(shè)計(jì) 選擇下載模式:獲得下載連接,即根據(jù)用戶輸入的 url 取得網(wǎng)絡(luò)連接后 ,根據(jù)響應(yīng)碼選擇下載模式。當(dāng)采用多線程下載模式,我們首先要生成若干個(gè)線程,線程個(gè)數(shù)與用戶在新建下載對(duì)話框選擇的下載個(gè)數(shù)一致;然后將資源分成若干個(gè)塊,每個(gè)線程負(fù)責(zé)下載一塊。再根據(jù)響應(yīng)嗎的值選擇下載模式。 } } } } Download 模塊的設(shè)計(jì) Download 模塊主要包含如下幾個(gè)子模塊: 獲得下載連接和選擇下載模式(單線程或多線程)、創(chuàng)建下載線程和分配每個(gè)線程下載塊的大小、啟動(dòng)線程下載、計(jì)算每個(gè)線程已下載的大小和獲取已經(jīng)完成的線程的數(shù)量。 int result=(, 確定 )。 } } else{ (, 地址不能為空 )。 } ()。 點(diǎn)擊瀏覽按鈕:系統(tǒng)自動(dòng)彈出文件保存位置選擇框; 點(diǎn)擊確定按鈕:創(chuàng)建下載實(shí)體,回到主界面; 點(diǎn)擊取消按鈕:取消下載,回到主界面; 關(guān)鍵代碼如下: 在文本框中輸入 url后,可自動(dòng)在保存文件名的框中輸入文件名; 關(guān)鍵代碼如下: //監(jiān)聽(tīng) 確定 , 取消 按鈕 class Cancel_AND_Sure_Lisener implements ActionListener{ 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 25 public void actionPerformed(ActionEvent e) { if(取 消 .equals(().trim())){ //點(diǎn)擊取消按鈕 ()。 …………………… (pane_1)。 (new Cancel_AND_Sure_Lisener())。 //定義按鈕的監(jiān)聽(tīng)事件 (new Cancel_AND_Sure_Lisener())。 (350, 200, 70, 30)。 (498, 55,70,30)。 (88, 55, 400,30)。 (88, 20, 460,30)。 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 24 (125, 98, 300, 30)。 (20,180,58,30)。 (20,20,58,30)。 (null)。 ()。 } (9)。i 20。 thread_count_box=new JComboBox()。若用戶點(diǎn)擊確定按鈕,則下載該資源,并回到主界面;若用戶點(diǎn)擊取消按鈕,則取 消下載該資源,同樣最后會(huì)回到主界面。接下來(lái)用戶可以修改保存文件名,接著是選擇線程數(shù)目。用戶首先需要 URL 地址,輸入 URL 地址后,系統(tǒng)會(huì)進(jìn)行判斷此 URL 地址是否合法,若不合法則要求用戶重新輸入新的 URL,輸入 URL 后系統(tǒng)會(huì)自動(dòng)生成一個(gè)文件名,填充在保存文件名的文本框中。 //更新表格 } } NewDownload 模塊設(shè)計(jì) 模塊流程分析 根據(jù)需求分析 ,當(dāng)用戶點(diǎn)擊新建下載按鈕,則系統(tǒng)彈出一個(gè)新建下載對(duì)話框,里面包含一個(gè)輸入 url 的文本框,一個(gè)保存地址的文本框,一個(gè)保存文件名的文本框。 //從 table中移除該行 //從全局界面的 download集合中移除該下載對(duì)象 Download down=(i)。 i++) { Object obj=(i)[8]。關(guān)鍵代碼如下: public void downOver(Download download) { for (int i = 0。//更新表格 i=()。 } (i)[2]=strsize。 if(size){ //判斷文件大小是否大于 1024KB temp=(int)(size*100/1024)。 //得到文件實(shí)際大?。?KB) float temp=(int)(size*100)。同樣需要更新的還有:連接線程狀態(tài),是否完成,下載百分比, 剩余時(shí)間等。 } 當(dāng)啟動(dòng)一個(gè)下載任務(wù),系統(tǒng)必須給表格動(dòng)態(tài)的設(shè)定一些列的值。//將 tabledata的容量調(diào)整為列表的當(dāng)前大 小 fireTableRowsDeleted(row, row)。 } } 刪除一個(gè)下載項(xiàng)目我們只需要了解刪除條目的行數(shù)( row值),刪除一個(gè)下載條目的關(guān)鍵代碼如下: public boolean removeRow(int row){ (row)。 return true。 (obj)。 圖 DownTableModel 界面 模塊數(shù)據(jù)動(dòng)態(tài)更新 由于隨著下載的進(jìn)行, Table中每列的值要不斷地變化,所以要對(duì) table進(jìn)行動(dòng)態(tài)更新。 } //得到表格某個(gè)具體單元格的值 public Object getValueAt(int rowIndex, int columnIndex) { return (rowIndex)[columnIndex]。 } public int getColumnCount() { //得到表格總的列數(shù) return 。 public DownTableModel(JTable table) { //構(gòu)造函數(shù) = table。 private URL url。 //設(shè)定列名數(shù)組 private ArrayListObject[] tabledata = new ArrayListObject[]()。 DownTableModel的實(shí)現(xiàn)是繼承一個(gè) AbstractTableModel類(lèi),繼承這個(gè)類(lèi)必須實(shí)現(xiàn)它的一些方法: 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 19 getRowCount()、 getColumnCount()、 getValueAt()、 getColumnName();同時(shí)我們還要為表格的每一個(gè)列定義一個(gè)列名(定義一個(gè)名字的集合),同時(shí)將名字的集合傳到 getColumnName()這個(gè)方法,內(nèi)部會(huì)自動(dòng)為每一列分配一個(gè)類(lèi)名。 //全局 MainFrame public static DownTableModel globaltable。 } } } })。 (i)。irow。 //刪除下載監(jiān)聽(tīng)事件 (new ActionListener() { public void actionPerformed(ActionEvent e) { int row=()。i++){ if((i)){ //開(kāi)始選中下載項(xiàng) (i)。//得到所有下載條目個(gè)數(shù) for(int i=0。 } } 湖南科技大學(xué)本科生畢業(yè)設(shè)計(jì)(論文) 18 } })。irow。 //暫停下載監(jiān)聽(tīng)事件 (new ActionListener() { public void actionPerformed(ActionEvent e) { int row=()。 點(diǎn)擊新建下載按鈕:下載器要彈出新建下載框; 點(diǎn)擊暫停下載按鈕:將選中的下載條目暫停; 點(diǎn)擊開(kāi)始下載按鈕:將選中的下載條目重新開(kāi)始下載; 點(diǎn)擊刪除下載按鈕:將選中的下載條目刪除,放入垃圾箱; 關(guān)鍵代碼如下: private void addListener(){ //新建下載監(jiān)聽(tīng)事件 (new ActionListener() { public void actionPerformed(ActionEvent e) { addNewDownload()。 return this。 // 設(shè)置進(jìn)
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1