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

正文內(nèi)容

畢業(yè)論文及設計:基于java網(wǎng)絡編程功能的web服務器上下載(編輯修改稿)

2025-01-06 22:03 本頁面
 

【文章內(nèi)容簡介】 第 3章 Download 下載器的實現(xiàn) Download類 Download的主要工作由 Download類完成。它的主要作用是下載一個文件并將其內(nèi)容保存到磁盤。每次向 Download 添加一個新的下載任務時,就會有一個新的 Download對象被實例化,已處理這個下載。 Download具有同時下載多個文件的能力。為此,每個同時進行的下載任務都必須獨立進行,且每個單獨的下載還必須管理自己的狀態(tài),以便反映在 GUI中。 167。 Download的變量聲明 Download 類首先聲明幾個靜態(tài)的 final 變量,用來指定類中將使用的幾個變量。變量 url 用來保存被下載文件的 URL;變量 size用來指定下載文件的字節(jié)數(shù)XXXX大學畢業(yè)論文 (設計 ) 5 大??;變量 downloaded用來保存已經(jīng)下載的字節(jié)數(shù);變量 status 用于表明當前的下載狀態(tài)。 // 導入程序必須的 java包 import 。 import .*。 import .*。 import .*。 class Download extends Observable implements Runnable { private static final int MAX_BUFFER_SIZE=1024。 // 定義一個靜態(tài) 的私有 變量,其最大值為 1024字節(jié) ……… ……… // 定義一個私有變量 , 用來保存被下載文件的 URL private URL url。 // 變量 size用來指定下載文件的字節(jié)數(shù)大小 private int size。 // 變量 downloaded用來保存已經(jīng)下載的字節(jié)數(shù) private int downloaded。 // 變量 status 用于表明當前的下載狀態(tài) private int status。 } Download的構造函數(shù) 采用 URL對象的形式,向 Download的構造函數(shù)傳遞傳遞指向要從 中下載文件的 URL的引用,該引用被賦給 url 實例變量。然后,該構造函數(shù)將其余的變量XXXX大學畢業(yè)論文 (設計 ) 6 設置為初始狀態(tài),并調用 download()方法。 // 為 Download類創(chuàng)建一個構造函數(shù) public Download(URL url) { =url。 size=1。 downloaded=0。 status=DOWNLOADING。 download()。 // 調用下載方法 } download()方法 download()方法創(chuàng)建一個新的 Thread 對象 , 并傳遞給他一個調用 Download實例的引用。為了使 Download 類獨立工作 , 必須讓它在自己的線程中執(zhí)行。為了使用線程, Download 類通過重寫 run()方法簡單的實現(xiàn)了 Runable 接口。在download()方法實例化一個新的 Thread 實例后,當向構造函數(shù)傳遞 Runnable Download類時,調用線程的 start()方法。 // 創(chuàng)建一個新的下載進程 private void download(){ thre Thread ad=new Thread(this)。 ()。 } // 根據(jù)文件的物理地址獲得文件名 private String getFileName(URL url){ String fileName=()。 XXXX大學畢業(yè)論文 (設計 ) 7 return ((39。/39。)+1)。 run()方法 執(zhí)行 run()方法,才開始實際的下載工作。 Run()方法從下面代碼開始: public void run() { RandomAccessFile file=null。 InputStream stream=null。 try{ //與 URL地址建立一個連接 HttpURLConnection connection=(HttpURLConnection)()。 首先, run()為網(wǎng)絡流設置變量,下載的內(nèi)容就是從網(wǎng)絡流中讀取的,同時設置將寫入下載內(nèi)容的文件。接下來調用 ()打開到下載 URL地址的連接。由 于 Download 只支持 HTTP 下載,因此該連接被強制轉換為HttpURLConnection 類型。將連接強制轉換為 HttpURLConnection 允許我們利用HTTP特有的連接特性,比如 getrResponseCode()方法。 創(chuàng)建 HttpRULConnection之后,通過調用 ()設置連接請求的屬性。如下所示: //設置連接請求的屬性 (Range, bytes=+downloaded+)。 在本行代碼中,設置了 “Range”屬性。這一屬性極為重要,因為 “Range”屬性指定了從服務器上請求下載的字節(jié)范圍。 “Range”屬性指定的形式如下: Startbyte—endbyte 此范圍的終止字節(jié)是可選的。如果終止字節(jié)為空,則一直下載到文件的末尾。 // 連接下載的服務器 。 XXXX大學畢業(yè)論文 (設計 ) 8 //確認服務器的響應代碼是 200 if(()/100 !=2){ error()。 } //獲得內(nèi)容的長 度,它表示被請求的字節(jié)數(shù) int contentLength=()。 if(contentLength1){ error()。 } 此方法調用 ()方法實際連接下載的服務器。接下來,檢驗服務器返回的響應代碼。 Http協(xié)議由一個響應代碼列表,表示服務器對請求的響應。 Http響應以 100的倍數(shù)表示, 200表示成功。調用 ()并除以 100可以確認服務器的響應 代碼是 200:如果商為 2,則表示連接成功。 接下來, run()方法通過調用 ()獲得內(nèi)容的長度,它表示被請求的字節(jié)數(shù)。如果長度小于 1,則調用 error()方法。 Error()方法將下載的狀態(tài)更新為 ERROR,然后調用 stateChanged()。 if(size==1){ size=contentLength。 stateChanged()。 } 將內(nèi)容長度賦給 size 變量是有條件的。如果指定的起始范圍不是 0,則代表內(nèi)容 長度僅代表整個文件大小的一部分。因此,為了能下載全部文件, size 變量必須被設置為下載文件的整個大小。 // 以 rw 模式打開一個文件 file= new RandomAccessFile(getFileName(url),rw)。 (downloaded)。 XXXX大學畢業(yè)論文 (設計 ) 9 RandomAccessFile 以 “rw”模式打開,表示對該文件可以進行讀寫操作。文件一旦打開, run()方法通過調用 方法找到文件的末尾,并將其傳遞給downloaded變量。這會將文件定位到已下載 的字節(jié)數(shù),也就是定位到文件末尾。為了恢復一個下載,必須要定位到文件的結尾處。如果一項下載被恢復,則新下載的字節(jié)將被追加到文件中,它們不會覆蓋先前下載的任何字節(jié)。準備好輸出文件后,調用 ()可以獲得一個已打開的服務器連接的網(wǎng)絡句柄,如下所示: stream=()。 所有這些操作的核心,以一個 while循環(huán)開始: while(status==DOWNLOADING){ // 根據(jù) buffer 變量的大小判斷還有 多少字節(jié)未被下載 byte buffer[]。 if(sizedownloadedMAX_BUFFER_SIZE){ buffer=new byte[MAX_BUFFER_SIZE]。 } else{ buffer=new byte[sizedownloaded]。 } int read=(buffer)。 if(read==1){ break。 } //將已讀取的 字節(jié)通過調用寫入磁盤 (buffer, 0, read)。 downloaded+=read。 stateChanged()。 } XXXX大學畢業(yè)論文 (設計 ) 10 這個循環(huán)將不斷運行,直到下載任務的 status 變量從 DOWNLOADING變?yōu)槠渌?。在循環(huán)內(nèi)部創(chuàng)建了一個 byte緩沖區(qū)數(shù)組,可以保存被下載的字節(jié)。此緩沖區(qū)的大小會根據(jù)剩余下載量的多少進行設置。如果剩余的下載量大于MAX_BUFFER_SIZE,則使用 MAX_BUFFER_SIZE來設置緩沖區(qū)的大小。否則,就將緩沖區(qū)恰好設置為剩 余下載量的大小。一旦設置了緩沖區(qū)的大小,就可以調用 ()進行下載。該調用將從服務器上讀取字節(jié)并將它們放入緩沖區(qū)中,并返回實際讀取的字節(jié)數(shù)。如果讀取的字節(jié)數(shù)為 1,則下載完成并退出循環(huán)。否則下載尚未結束,已讀取的字節(jié)通過調用 ()寫入磁盤。接著,更新downloaded變量,以反映目前已下載的字節(jié)數(shù)。 退出循環(huán)之后,下面的代碼檢查循環(huán)是以什么方式退出的: if(status==DOWNLOADING){ status=COMPLETE。 stateChanged()。 } 如果下載的狀態(tài)依然是 DOWNLOADING,則意味著循環(huán)退出是因為下載已經(jīng)完成。否則,退出循環(huán)是因為下載的狀態(tài)從 DOWNLOADING改變成了其它狀態(tài)。 run()方法包含 catch塊和 finally塊,如下所示: }catch(Exception e) { er
點擊復制文檔內(nèi)容
試題試卷相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1