用Java實現HTTP斷點續傳(2)

(二) Java 實現斷點續傳的關鍵幾點

(1)用什麼方法實現提交RANGE: bytes=2000070-。
固然用最原始的Socket是確定能完成的,不過那樣太費事了,其實Java的net包中提供了這種功能。代碼以下:

URL url = new URL(" http://www.sjtu.edu.cn/down.zip";;);
HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection

();
//設置User-Agent
httpConnection.setRequestProperty("User-Agent","NetFox");
//設置斷點續傳的開始位置
httpConnection.setRequestProperty("RANGE","bytes=2000070");
//得到輸入流
InputStream input = httpConnection.getInputStream();

從輸入流中取出的字節流就是down.zip文件從2000070開始的字節流。你們看,其實斷點續傳用Java實現起來仍是很簡單的吧。接下來要作的事就是怎麼保存得到的流到文件中去了。

保存文件採用的方法

我採用的是IO包中的RandAccessFile類。

操做至關簡單,假設從2000070處開始保存文件,代碼以下:

RandomAccess oSavedFile = new RandomAccessFile("down.zip","rw");
long nPos = 2000070;
//定位文件指針到nPos位置
oSavedFile.seek(nPos);
byte[] b = new byte[1024];
int nRead;
//從輸入流中讀入字節流,而後寫到文件中
while((nRead=input.read(b,0,1024)) > 0)
{
oSavedFile.write(b,0,nRead);
}

接下來要作的就是整合成一個完整的 程序了。包括一系列的線程控制等等。

(三)斷點續傳內核的實現 主要用了6個類,包括一個測試類: SiteFileFetch.java負責整個文件的抓取,控制內部線程(FileSplitterFetch類)。 FileSplitterFetch.java負責部分文件的抓取。 FileAccess.java負責文件的存儲。 SiteInfoBean.java要抓取的文件的信息,如文件保存的目錄,名字,抓取文件的URL等。 Utility.java工具類,放一些簡單的方法。 TestMethod.java測試類。
相關文章
相關標籤/搜索