java

位置:IT落伍者 >> java >> 浏览文章

用Java实现HTTP断点续传功能(2)


发布日期:2023年04月24日
 
用Java实现HTTP断点续传功能(2)

//启动子线程

fileSplitterFetch = new FileSplitterFetch[nStartPoslength];

for(int i=;i<nStartPoslength;i++)

{

fileSplitterFetch[i] = new FileSplitterFetch(siteInfoBeangetSSiteURL()

siteInfoBeangetSFilePath() + Fileseparator + siteInfoBeangetSFileName()

nStartPos[i]nEndPos[i]i);

Utilitylog(Thread + i + nStartPos = + nStartPos[i] + nEndPos = + nEndPos[i]);

fileSplitterFetch[i]start();

}

// fileSplitterFetch[nPoslength] = new FileSplitterFetch(siteInfoBeangetSSiteURL()

siteInfoBeangetSFilePath() + Fileseparator + siteInfoBeangetSFileName()nPos[nPoslength]nFileLengthnPoslength);

// Utilitylog(Thread + (nPoslength) + nStartPos = + nPos[nPoslength] +

nEndPos = + nFileLength);

// fileSplitterFetch[nPoslength]start();

//等待子线程结束

//int count = ;

//是否结束while循环

boolean breakWhile = false;

while(!bStop)

{

write_nPos();

Utilitysleep();

breakWhile = true;

for(int i=;i<nStartPoslength;i++)

{

if(!fileSplitterFetch[i]bDownOver)

{

breakWhile = false;

break;

}

}

if(breakWhile)

break;

//count++;

//if(count>)

// siteStop();

}

Systemerrprintln(文件下载结束!);

}

catch(Exception e){eprintStackTrace ();}

}

//获得文件长度

public long getFileSize()

{

int nFileLength = ;

try{

URL url = new URL(siteInfoBeangetSSiteURL());

HttpURLConnection httpConnection = (HttpURLConnection)urlopenConnection ();

(UserAgentNetFox);

int responseCode=();

if(responseCode>=)

{

processErrorCode(responseCode);

return ; // represent access is error

}

String sHeader;

for(int i=;;i++)

{

//DataInputStream in = new DataInputStream( ());

//Utilitylog(inreadLine());

sHeader=(i);

if(sHeader!=null)

{

if(sHeaderequals(ContentLength))

{

nFileLength = IntegerparseInt((sHeader));

break;

}

}

else

break;

}

}

catch(IOException e){eprintStackTrace ();}

catch(Exception e){eprintStackTrace ();}

Utilitylog(nFileLength);

return nFileLength;

}

//保存下载信息(文件指针位置)

private void write_nPos()

{

try{

output = new DataOutputStream(new FileOutputStream(tmpFile));

outputwriteInt(nStartPoslength);

for(int i=;i<nStartPoslength;i++)

{

// outputwriteLong(nPos[i]);

outputwriteLong(fileSplitterFetch[i]nStartPos);

outputwriteLong(fileSplitterFetch[i]nEndPos);

}

outputclose();

}

catch(IOException e){eprintStackTrace ();}

catch(Exception e){eprintStackTrace ();}

}

//读取保存的下载信息(文件指针位置)

private void read_nPos()

{

try{

DataInputStream input = new DataInputStream(new FileInputStream(tmpFile));

int nCount = inputreadInt();

nStartPos = new long[nCount];

nEndPos = new long[nCount];

for(int i=;i<nStartPoslength;i++)

{

nStartPos[i] = inputreadLong();

nEndPos[i] = inputreadLong();

}

inputclose();

}

catch(IOException e){eprintStackTrace ();}

catch(Exception e){eprintStackTrace ();}

}

private void processErrorCode(int nErrorCode)

{

Systemerrprintln(Error Code : + nErrorCode);

}

//停止文件下载

public void siteStop()

{

bStop = true;

for(int i=;i<nStartPoslength;i++)

fileSplitterFetch[i]splitterStop();

}

}

               

上一篇:Java中的构造函数继承

下一篇:java如何通过google map api实现地址解析