來源:北大青鳥飛迅校區(qū)|發(fā)布時間:2013-05-03 17:28:20
怎么樣,也很簡單吧。 接下來要做的就是整合成一個完整的程序了。包括一系列的線程控制等等。
斷點續(xù)傳內(nèi)核的實現(xiàn)
主要用了 6 個類,包括一個測試類。
SiteFileFetch.java 負責(zé)整個文件的抓取,控制內(nèi)部線程 (FileSplitterFetch 類 )。
FileSplitterFetch.java 負責(zé)部分文件的抓取。
FileAccess.java 負責(zé)文件的存儲。
SiteInfoBean.java 要抓取的文件的信息,如文件保存的目錄,名字,抓取文件的 URL 等。
Utility.java 工具類,放一些簡單的方法。
TestMethod.java 測試類。
下面是源程序:
/*
/*
* SiteFileFetch.java
*/
package NetFox;
import java.io.*;
import java.net.*;
public class SiteFileFetch extends Thread {
SiteInfoBean siteInfoBean = null; // 文件信息 Bean
long[] nStartPos; // 開始位置
long[] nEndPos; // 結(jié)束位置
FileSplitterFetch[] fileSplitterFetch; // 子線程對象
long nFileLength; // 文件長度
boolean bFirst = true; // 是否第一次取文件
boolean bStop = false; // 停止標志
File tmpFile; // 文件下載的臨時信息
DataOutputStream output; // 輸出到文件的輸出流
public SiteFileFetch(SiteInfoBean bean) throws IOException
{
siteInfoBean = bean;
//tmpFile = File.createTempFile (“zhong”,“1111”,new File(bean.getSFilePath()));
tmpFile = new File(bean.getSFilePath()+File.separator + bean.getSFileName()+“.info”);
if(tmpFile.exists ())
{
bFirst = false;
read_nPos();
}
else
{
nStartPos = new long[bean.getNSplitter()];
nEndPos = new long[bean.getNSplitter()];
}
}
public void run()
{
// 獲得文件長度
// 分割文件
// 實例 FileSplitterFetch
// 啟動 FileSplitterFetch 線程
// 等待子線程返回
try{
if(bFirst)
{
nFileLength = getFileSize();
if(nFileLength == -1)
{
System.err.println(“File Length is not known!”);
}
else if(nFileLength == -2)
{
System.err.println(“File is not access!”);
}
else
{
for(int i=0;i《nStartPos.length;i++)
{
nStartPos[i] = (long)(i*(nFileLength/nStartPos.length));
}
for(int i=0;i《nEndPos.length-1;i++)
{
nEndPos[i] = nStartPos[i+1];
}
nEndPos[nEndPos.length-1] = nFileLength;
}
}
// 啟動子線程
fileSplitterFetch = new FileSplitterFetch[nStartPos.length];
for(int i=0;i《nStartPos.length;i++)
{
fileSplitterFetch[i] = new FileSplitterFetch(siteInfoBean.getSSiteURL(),
siteInfoBean.getSFilePath() + File.separator + siteInfoBean.getSFileName(),
nStartPos[i],nEndPos[i],i);
Utility.log(“Thread ” + i + “ , nStartPos = ” + nStartPos[i] + “, nEndPos = ”
+ nEndPos[i]);
fileSplitterFetch[i].start();
}
全程面授,不高薪都難
申請成功后,我們將在24小時內(nèi)與您聯(lián)系
招生熱線: 4008-0731-86 / 0731-82186801
學(xué)校地址: 長沙市天心區(qū)團結(jié)路6號
Copyright © 2006 | 湖南大計信息科技有限公司 版權(quán)所有
湘ICP備14017520號-3