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

来源:北大青鸟飞迅校区|发布时间:2013-05-03 17:28:20

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

断点续传内核的实现

主要用了 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();

}

上一篇:Java实现断点续传(HTTP)一
下一篇:北大青鸟老师讲解:Java:Web应用下实现定时任务的简便方法

热门话题

招生热线: 4008-0731-86 / 0731-82186801

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

Copyright © 2006 | 湖南大计信息科技有限公司 版权所有

湘ICP备14017520号-3

关注我们
在线咨询
嘿,我来帮您!