亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 一個多線程、支持斷點續傳的java源碼.java

?? 一個多線程、支持斷點續傳的java源碼
?? JAVA
字號:
/**SiteFileFetch.java*/
package NetFox;
import java.io.*;
import java.net.*;
public class SiteFileFetch extends Thread {
	SiteInfoBean siteInfoBean = null; //文件信息Bean
	long[] nStartPos; //開始位置
	long[] nEndPos; //結束位置
	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();
		}

		// fileSplitterFetch[nPos.length-1] = new FileSplitterFetch(siteInfoBean.getSSiteURL(),
		//siteInfoBean.getSFilePath() + File.separator + siteInfoBean.getSFileName(),nPos[nPos.length-1],nFileLength,nPos.length-1);
		// Utility.log("Thread " + (nPos.length-1) + " , nStartPos = " + nPos[nPos.length-1] + ",nEndPos = " + nFileLength);
		// fileSplitterFetch[nPos.length-1].start();
		//等待子線程結束
		//int count = 0;
		//是否結束while循環
		
		boolean breakWhile = false;
		while(!bStop){
			write_nPos();
			Utility.sleep(500);
			breakWhile = true;
			for(int i=0;i<nStartPos.length;i++){
				if(!fileSplitterFetch[i].bDownOver){
					breakWhile = false;
					break;
				}
			}
			if(breakWhile)
				break;
			//count++;
			//if(count>4)
			// siteStop();
		}
		System.err.println("文件下載結束!");
	}catch(Exception e){e.printStackTrace ();}

}

	//獲得文件長度
	public long getFileSize(){
		int nFileLength = -1;
		try{
			URL url = new URL(siteInfoBean.getSSiteURL());
			HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection ();
			httpConnection.setRequestProperty("User-Agent","NetFox");
			int responseCode=httpConnection.getResponseCode();
			if(responseCode>=400){
				processErrorCode(responseCode);
				return -2; //-2 represent access is error
			}
			
			String sHeader;
			for(int i=1;;i++){
				//DataInputStream in = new DataInputStream(httpConnection.getInputStream ());
				//Utility.log(in.readLine());
				sHeader=httpConnection.getHeaderFieldKey(i);
				if(sHeader!=null){
					if(sHeader.equals("Content-Length")){
						nFileLength = Integer.parseInt(httpConnection.getHeaderField(sHeader));
						break;
					}

				}else{
					break;
				}
			}
		}catch(IOException e){
			e.printStackTrace ();
		}catch(Exception e){
			e.printStackTrace ();
		}
		Utility.log(nFileLength);
		return nFileLength;
	}

//保存下載信息(文件指針位置)
private void write_nPos(){
try{
output = new DataOutputStream(new FileOutputStream(tmpFile));
output.writeInt(nStartPos.length);
for(int i=0;i<nStartPos.length;i++){
// output.writeLong(nPos[i]);
output.writeLong(fileSplitterFetch[i].nStartPos);
output.writeLong(fileSplitterFetch[i].nEndPos);
}
output.close();
}catch(IOException e){e.printStackTrace ();}
catch(Exception e){e.printStackTrace ();}
}

//讀取保存的下載信息(文件指針位置)
private void read_nPos(){
try{
DataInputStream input = new DataInputStream(new FileInputStream(tmpFile));
int nCount = input.readInt();
nStartPos = new long[nCount];
nEndPos = new long[nCount];
for(int i=0;i<nStartPos.length;i++){
nStartPos[i] = input.readLong();
nEndPos[i] = input.readLong();
}
input.close();
}catch(IOException e){e.printStackTrace ();}
catch(Exception e){e.printStackTrace ();}
}




private void processErrorCode(int nErrorCode){
System.err.println("Error Code : " + nErrorCode);
}

//停止文件下載
public void siteStop(){
bStop = true;
for(int i=0;i<nStartPos.length;i++)
fileSplitterFetch[i].splitterStop();
}
}


/***FileSplitterFetch.java*/


package NetFox;
import java.io.*;
import java.net.*;
public class FileSplitterFetch extends Thread {

String sURL; //File URL
long nStartPos; //File Snippet Start Position
long nEndPos; //File Snippet End Position
int nThreadID; //Thread's ID
boolean bDownOver = false; //Downing is over
boolean bStop = false; //Stop identical
FileAccessI fileAccessI = null; //File Access interface

public FileSplitterFetch(String sURL,String sName,long nStart,long nEnd,int id) throws IOException{
this.sURL = sURL;
this.nStartPos = nStart;
this.nEndPos = nEnd;
nThreadID = id;
fileAccessI = new FileAccessI(sName,nStartPos);
}

public void run(){
while(nStartPos < nEndPos && !bStop){
try{
URL url = new URL(sURL);
HttpURLConnection httpConnection = (HttpURLConnection)url.openConnection ();
httpConnection.setRequestProperty("User-Agent","NetFox");
String sProperty = "bytes="+nStartPos+"-";
httpConnection.setRequestProperty("RANGE",sProperty);
Utility.log(sProperty);
InputStream input = httpConnection.getInputStream();
//logResponseHead(httpConnection);
byte[] b = new byte[1024];
int nRead;
while((nRead=input.read(b,0,1024)) > 0 && nStartPos < nEndPos && !bStop){
nStartPos += fileAccessI.write(b,0,nRead);
//if(nThreadID == 1)
// Utility.log("nStartPos = " + nStartPos + ", nEndPos = " + nEndPos);
}

Utility.log("Thread " + nThreadID + " is over!");
bDownOver = true;
//nPos = fileAccessI.write (b,0,nRead);
}catch(Exception e){e.printStackTrace ();}
}

}
//打印回應的頭信息
public void logResponseHead(HttpURLConnection con){
for(int i=1;;i++){
String header=con.getHeaderFieldKey(i);
if(header!=null)
//responseHeaders.put(header,httpConnection.getHeaderField(header));
Utility.log(header+" : "+con.getHeaderField(header));
else
break;
}
}


public void splitterStop(){
bStop = true;
}

}

/***FileAccess.java*/
package NetFox;
import java.io.*;

public class FileAccessI implements Serializable{
RandomAccessFile oSavedFile;
long nPos;
public FileAccessI() throws IOException{
this("",0);
}

public FileAccessI(String sName,long nPos) throws IOException{
oSavedFile = new RandomAccessFile(sName,"rw");
this.nPos = nPos;
oSavedFile.seek(nPos);
}


public synchronized int write(byte[] b,int nStart,int nLen){
int n = -1;
try{
oSavedFile.write(b,nStart,nLen);
n = nLen;
}catch(IOException e){
e.printStackTrace ();
}

return n;
}

}

/***SiteInfoBean.java*/
package NetFox;
public class SiteInfoBean {

private String sSiteURL; //Site's URL
private String sFilePath; //Saved File's Path
private String sFileName; //Saved File's Name
private int nSplitter; //Count of Splited Downloading File

public SiteInfoBean(){
//default value of nSplitter is 5
this("","","",5);
}

public SiteInfoBean(String sURL,String sPath,String sName,int nSpiltter){
sSiteURL= sURL;
sFilePath = sPath;
sFileName = sName;
this.nSplitter = nSpiltter;
}

public String getSSiteURL(){
return sSiteURL;
}

public void setSSiteURL(String value){
sSiteURL = value;
}

public String getSFilePath(){
return sFilePath;
}

public void setSFilePath(String value){
sFilePath = value;
}

public String getSFileName(){
return sFileName;
}

public void setSFileName(String value){
sFileName = value;
}

public int getNSplitter(){
return nSplitter;
}

public void setNSplitter(int nCount){
nSplitter = nCount;
}

}

/***Utility.java*/
package NetFox;
public class Utility {

public Utility(){

}




public static void sleep(int nSecond){

try{
Thread.sleep(nSecond);
}catch(Exception e){
e.printStackTrace ();
}

}

public static void log(String sMsg){
System.err.println(sMsg);
}

public static void log(int sMsg){
System.err.println(sMsg);
}

}


/***TestMethod.java*/
package NetFox;

public class TestMethod {

public TestMethod(){ ///xx/weblogic60b2_win.exe
try{
SiteInfoBean bean = new SiteInfoBean("http://localhost/xx/weblogic60b2_win.exe","L:\\temp","weblogic60b2_win.exe",5);
//SiteInfoBean bean = new SiteInfoBean("http://localhost:8080/down.zip","L:\\temp","weblogic60b2_win.exe",5);
SiteFileFetch fileFetch = new SiteFileFetch(bean);
fileFetch.start();
}catch(Exception e){e.printStackTrace ();}
}


public static void main(String[] args){
new TestMethod();
}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩色在线观看| 亚洲成av人片www| 亚洲人成网站色在线观看| 亚洲成人tv网| 国产ts人妖一区二区| 欧美日韩成人综合天天影院 | 国产精品第一页第二页第三页| 一区二区三区精品视频| 国产精品1区2区3区在线观看| 欧美怡红院视频| 中文字幕一区二区日韩精品绯色| 日韩av在线免费观看不卡| 日本高清无吗v一区| 久久综合五月天婷婷伊人| 亚洲成人在线观看视频| 成人av在线播放网址| 亚洲精品一区二区三区影院| 日韩高清一区在线| 日本电影亚洲天堂一区| 国产精品国产三级国产aⅴ中文| 狠狠色丁香久久婷婷综合丁香| 欧美另类高清zo欧美| 亚洲综合一区在线| 一本色道a无线码一区v| 国产精品麻豆网站| 东方欧美亚洲色图在线| 久久麻豆一区二区| 韩国精品主播一区二区在线观看| 制服.丝袜.亚洲.中文.综合| 午夜久久福利影院| 欧美日韩的一区二区| 日韩黄色片在线观看| 欧美日韩国产123区| 亚洲午夜免费视频| 精品视频999| 视频一区免费在线观看| 日韩一区二区免费在线观看| 免费看日韩精品| 精品粉嫩aⅴ一区二区三区四区| 久久99国产精品免费| 久久久国产精华| 成人久久视频在线观看| 国产精品不卡视频| 91在线精品一区二区三区| 亚洲免费观看高清完整版在线观看| 99re这里只有精品首页| 亚洲一区二区三区美女| 欧美人与性动xxxx| 美女精品自拍一二三四| 久久女同互慰一区二区三区| 丁香激情综合五月| 亚洲美女视频一区| 欧美一区二区视频观看视频| 国产一区不卡精品| 中文字幕一区二区三区不卡| 在线视频欧美区| 免费一级片91| 亚洲国产岛国毛片在线| 91久久精品网| 久久精工是国产品牌吗| 国产精品久久久久久久久免费相片 | 欧美一级在线视频| 国产一区二区三区| 亚洲区小说区图片区qvod| 欧美色爱综合网| 国产精品影视在线观看| 一区二区三区中文在线| 欧美一区午夜视频在线观看| 高清在线不卡av| 婷婷久久综合九色综合绿巨人| 久久一夜天堂av一区二区三区| 91免费国产在线观看| 美女www一区二区| 最新热久久免费视频| 欧美一区二区视频免费观看| 91视频在线看| 精品一区二区三区视频 | 国产人伦精品一区二区| 欧美日韩小视频| 成人高清视频在线观看| 日韩成人午夜精品| 亚洲免费看黄网站| 国产欧美精品国产国产专区| 777奇米四色成人影色区| 91亚洲国产成人精品一区二三| 九九**精品视频免费播放| 亚洲最大成人网4388xx| 中文字幕不卡三区| 日韩欧美自拍偷拍| 欧美日韩一二区| 99久久免费视频.com| 国产一区二区三区| 蜜桃视频免费观看一区| 一区二区激情视频| 日韩码欧中文字| 中文字幕乱码亚洲精品一区| 精品久久国产字幕高潮| 777午夜精品免费视频| 色噜噜狠狠色综合欧洲selulu| 成人涩涩免费视频| 国产精品88888| 国产真实乱偷精品视频免| 日韩二区三区在线观看| 图片区日韩欧美亚洲| 一区二区三区国产精华| 亚洲女同一区二区| 中文字幕一区不卡| 国产精品久久久久久一区二区三区| 久久综合丝袜日本网| 精品处破学生在线二十三| 日韩视频在线观看一区二区| 91精品国产福利| 91精品国产综合久久蜜臀| 91精品国产一区二区三区蜜臀| 欧美色精品在线视频| 欧美日韩情趣电影| 欧美精品一级二级| 欧美日韩精品免费| 欧美自拍偷拍一区| 欧美影院一区二区三区| 99国产欧美久久久精品| 精品久久久久久综合日本欧美| 亚洲成人免费在线观看| 日本欧美大码aⅴ在线播放| 亚洲无线码一区二区三区| 精品女同一区二区| 久久久精品国产免费观看同学| www.欧美.com| 欧美日韩精品福利| 日本麻豆一区二区三区视频| 久久先锋影音av鲁色资源| 国产精品综合在线视频| 成人免费毛片app| 国产精品黄色在线观看| 亚洲影院久久精品| 香蕉久久一区二区不卡无毒影院| 午夜亚洲国产au精品一区二区| 肉丝袜脚交视频一区二区| 91精品国产综合久久福利| 久久久不卡影院| 一本色道久久综合亚洲aⅴ蜜桃 | 高清beeg欧美| 在线看不卡av| 激情久久五月天| 久久久精品影视| 成人精品视频一区二区三区尤物| 成人h动漫精品一区二区| 一区二区三区国产精品| 亚洲一区二区视频在线观看| 另类小说图片综合网| 国产精品成人午夜| 欧美日韩国产一二三| 美女一区二区三区| 91视频在线观看免费| 99国产精品国产精品久久| 欧美日韩成人高清| 精品国产区一区| 色噜噜夜夜夜综合网| 91精品欧美福利在线观看| 国产精品一二三四| 欧美网站大全在线观看| 精品国产一区二区国模嫣然| 1区2区3区欧美| 亚洲欧美色综合| 美洲天堂一区二卡三卡四卡视频 | 亚洲成人中文在线| 99re8在线精品视频免费播放| 久久不见久久见免费视频7| 专区另类欧美日韩| 蜜臀av一区二区三区| 国产成a人无v码亚洲福利| 五月天丁香久久| 丝瓜av网站精品一区二区| 中文字幕日韩一区二区| 亚洲高清久久久| 成人性生交大片免费看中文| 一区二区在线观看免费| 国产在线精品一区二区不卡了| 午夜激情综合网| 国产69精品久久99不卡| 亚洲va欧美va国产va天堂影院| 黑人精品欧美一区二区蜜桃| 亚洲成a人v欧美综合天堂| 奇米精品一区二区三区在线观看 | 中文字幕第一页久久| 色菇凉天天综合网| 26uuuu精品一区二区| 日韩一区二区三免费高清| 国产精品久久久久久久久图文区| 亚洲va欧美va人人爽| 欧美国产在线观看| 午夜精品久久久久久不卡8050| 国产iv一区二区三区| 久久中文字幕电影| 色狠狠色狠狠综合| 中文乱码免费一区二区| 亚洲午夜一区二区| 国产精品免费久久| 91麻豆精品视频| 中文字幕亚洲精品在线观看|