[月影读书频道 http://wf66.com/]

fileSplitterFetch.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类用于在任意一个文件的特定位置上读/写字节

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

{//nSplitter的缺省值为5

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

}

}

对该文的评论 :

主要就是206响应和Content-Range罢了 sjjf。

trace:

我写过用socket实现的http断点下载的程序,其实写起来不难,关键是你要看懂蚂蚁里面的日志和RFC中的http协议

---------------------------------------Powered by DvNews.net

java断点续传 http_http断点续传简单实现(java)相关推荐

  1. java ssh客户端_简单的Java SSH客户端

    java ssh客户端 可以使用jcabi-ssh在Java中通过几行代码通过SSH执行shell命令: String hello = new Shell.Plain(new SSH("ss ...

  2. java 静态块初始化_简单了解java中静态初始化块的执行顺序

    这篇文章主要介绍了简单了解java中静态初始化块的执行顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在java中,其应该是先于所有的方法执行. ...

  3. java mapreduce程序_简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行...

    [TOC] 简单的java Hadoop MapReduce程序(计算平均成绩)从打包到提交及运行 程序源码 import java.io.IOException; import java.util. ...

  4. eclipse 如何关联git_作为一名初学Java者 如何做简单的Java项目

    作为一名初学Java者而言,如何做简单的Java项目?想要更有效率的学习Java技术,理论中穿插项目练习很有必要.但项目练习要在你掌握了一定的技术之后才能做的,它是用来加深你对技术理解的. 就拿Jav ...

  5. java开发框架 double_最简单的Java框架

    框架framework的目的是定义骨架式方案,处理各种相同的底层细节:而开发人员使用框架时,能够依照自己的需求实现自己的功能--仅仅须要填入自己的东西/flesh. 最简单的框架,类似于JUnit,它 ...

  6. java event事件_简单的Java Event-事件框架

    自己写的一个简单的Java事件框架.目前具备以下功能: 1.通过继承Event类,用户可自定义事件. 2.通过EventService 的fireEvent(Event e) 发出一个事件. 3.通过 ...

  7. java ear包_简单介绍Java 的JAR包、EAR包、WAR包区别

    原标题:简单介绍Java 的JAR包.EAR包.WAR包区别 WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件.War专 ...

  8. java语言say方法,简单了解Java方法的定义和使用实现详解

    简单了解Java方法的定义和使用实现详解 发布时间:2020-09-25 11:36:07 来源:脚本之家 阅读:78 作者:OLIVER_QIN 这篇文章主要介绍了简单了解Java方法的定义和使用实 ...

  9. java socket程序_java 简单的java socket程序

    //服务器端:ServerDemo.java import java.io.DataInputStream; import java.io.DataOutputStream; import java. ...

最新文章

  1. 基于Linux GlassFish v3 配置取代tomcat
  2. oracle归档日志写满错误解决方法
  3. 他,跳槽季用这样的方法复习进了阿里
  4. 错误: 找不到或无法加载主类 com.leyou.LeyouItemApplication Process finished with exit code 1...
  5. 标准C程序设计七---66
  6. 匿名内部类使用外部变量为什么必须是final修饰的
  7. 一个N*M的矩阵,找出这个矩阵中所有元素的和不小于K的面积最小的子矩阵
  8. 零基础学习 Python 之前期准备
  9. linux 进程 异常日志,linux后台启动程序,处理nohup日志太大的问题
  10. C++ 信号处理 signal(SIGINT, signalHandler);
  11. 关于使用Curvy插件实现物体沿指定路径移动的方法
  12. 简化版WIN7安装打印机时提示“打印机无法安装,打印处理器不存在。”正确处理方法...
  13. html怎么定义submit,HTML Input Submit value用法及代码示例
  14. win10和win11系统qq远程不能控制(点不动)的终极解决方法
  15. GET获取表单数据的方法
  16. 2022讯飞——糖尿病遗传风险检测挑战赛解决方案
  17. 【Cmake】初识CMake(一)
  18. 数据分析+数据挖掘暑期实习碎碎念
  19. 图片存放在服务器还是数据库里的解释?
  20. 店铺宝贝标题该怎么优化

热门文章

  1. python的重点_python知识点
  2. Mybatis源码之数据源模块分析
  3. redis 关系数据库怎么转换 和_redis数据库设计(转)
  4. / 卡路里_最大卡路里
  5. 程序员简历工作模式_简历的完整形式是什么?
  6. isinstance_Java类class isInstance()方法及示例
  7. 在JavaScript中以Hours24:Minutes:Seconds格式获取当前时间
  8. ruby推送示例_Ruby直到示例循环
  9. C#获取屏幕大小的“简单整理”。。
  10. 华为交换机S3700端口基本配置