长沙北大青鸟大计教育
在线测试

用Java实现断点续传(HTTP)二

发布时间:2013-05-03

怎么样,也很简单吧。 接下来要做的就是整合成一个完整的程序了。包括一系列的线程控制等等。

断点续传内核的实现

主要用了 6 个类,包括一个测试类。

SiteFileFetch.java 负责整个文件的抓取,控制内部线程 (FileSplitterFetch 类 )。

FileSplitterFetch.java 负责部分文件的抓取。

FileAccess.java 负责文件的存储。

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; // 结束位置

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();

}

在线申请

北大青鸟免费试听课程

 我已同意《隐私政策说明》
马上申请

学校地址: 长沙市天心区团结路6号

报名热线: 4008-0731-86 / 0731-82186801

Copyright © 2006 北大青鸟长沙大计教育
长沙市岳麓区大计职业技能培训学校有限公司版权所有

湘ICP备14017520号-3