java断点续传 http_http断点续传简单实现(java)

[月影读书频道 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/552058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows下python环境搭建_Linux/Windows下Python环境搭建步骤

Python环境搭建首先到官网&#xff08;www.python.org&#xff09;下载相应的安装版本。主要分为Windows和Linux两种&#xff1a; 一、Linux下Python环境搭建 一般情况下&#xff0c;Linux系统都已经预安装好Python&#xff0c;但是版本都比较低&#xff0c;需要安装新的版本方…

oracle 同一列数据不同条件分组求和_艾瑞教育:有关Oracle数据库,你需要知道的几件事...

Oracle一、Oracle数据库在存储过程中&#xff0c;如何在字符串中使用变量?例&#xff1a;select to_char(sysdate,yyyymmdd) into v_yyyymmdd from dual;execute immediate(create table tableName_bk_ || v_yyyymmdd || as select * from TableName);将B表中符合关联条件的A…

java 对象流传输socket_Java Socket(二)使用TCP传输对象

在Java Socket使用TCP的基础上&#xff0c;通过ObjectInputStream和ObjectOutputStream来读写对象。//传输的对象&#xff0c;需要序列化package socket;import java.io.Serializable;public class MsgTO implements Serializable{private static final long serialVersionUID …

python量化策略源码_[Python源码] 十大经典日内策略之空中花园(附源码分享)

function kzhy(freq)% targetList traderGetTargetList(); %获取目标资产信息 HandleList traderGetHandleList(); %获取账户句柄 global upline; global dnline; if isempty(upline)||isempty(dnline) uplinezeros(length(targetList),1);%记录今天通道的上轨 dnlinezeros(l…

网络多人游戏架构与编程 电子书_Java互联网架构-高性能网络编程必备技能IO与NIO阻塞分析...

欢迎关注头条号&#xff1a;java小马哥周一至周日早九点半&#xff01;下午三点半&#xff01;精品技术文章准时送上&#xff01;&#xff01;&#xff01;精品学习资料获取通道&#xff0c;参见文末一、概念NIO即New IO&#xff0c;这个库是在JDK1.4中才引入的。NIO和IO有相同…

java 接口文件夹_Java NIO.2 使用Path接口来监听文件、文件夹变化

Java7对NIO进行了大的改进&#xff0c;新增了许多功能&#xff1a;•对文件系统的访问提供了全面的支持•提供了基于异步Channel的IO这些新增的IO功能简称为 NIO.2&#xff0c;依然在java.nio包下。早期的Java只提供了File类来操作文件、文件夹本身&#xff0c;功能有限&#x…

python能制作游戏吗_没有Python不能做的游戏,这些游戏都可以做

简介:Python编程语言的强大&#xff0c;几乎是众所周知的&#xff01;那么&#xff0c;下面我给大家介绍一下几个用Python实现的各种游戏吧。不仅能用来做web、爬虫、数据分析等&#xff0c;没想到还能用做这么多的游戏&#xff0c;实在令人惊讶不已。注意&#xff1a;以下介绍…

vba excel 退出编辑状态_偷梁换柱之EXCEL编辑保护和VBA隐藏代码保护的解锁

如何解锁EXCEL表格编辑保护和VBA隐藏代码保护&#xff1f;当我们想借用别人的表格发现表格上锁无法编辑又不知道密码时或者当我们用软件生成一些表格时往往会遇到“上锁”问题&#xff0c;导致我们无法对表格进行改动。类似下图这样&#xff1a;那怎么才能征服她呢&#xff1f;…

java使用的页面静态化技术_java秒杀系列(2)- 页面静态化技术

###前言通过代码片段分别介绍服务端渲染、客户端渲染、对象缓存三种方式的写法。代码片段仅供参考&#xff0c;具体实现需要根据业务场景自行适配&#xff0c;但思想都是一样。一、服务端渲染方式####1、接口返回html页面的设置javaAutowiredThymeleafViewResolver thymeleafVi…

activex for chrome扩展程序 下载”_Chrome扩展程序一键生成网页骨架屏

对于依赖接口渲染的页面&#xff0c;在拿到数据之前页面往往是空白的&#xff0c;为了提示用户当前正在加载中&#xff0c;往往会使用进度条、loading图标或骨架屏的方式。对于前两种方案而言&#xff0c;实现比较简单&#xff1b;本文主要研究骨架屏的应用及实现&#xff0c;并…

python定时器 循环_python从写定时器学习Thread

python从写定时器学习Threadpython 如何写一个定时器&#xff0c;循环定时做某一操作呢&#xff1f;Timer 对象from threading import Timerdef hello():print "hello, world"t Timer(10.0, hello)t.start()10秒后输出&#xff1a;hello, world重点研究 t Timer(10…

java创建链表成绩管理系统_成绩管理系统 链表版

1.[代码][C/C]代码/**********************************************************程序描述&#xff1a;学生成绩管理系统*运行环境&#xff1a;Windows 7 SP1 X64*开发环境&#xff1a;CodeBlocks with Win7*作者&#xff1a;耗子、*时间&#xff1a;2015.03******************…

dynamo python修改多个参数_python之函数

a.sort()没有返回值。而sorted(a)是有返回值的。Python的标准比较运算符&#xff1a;<、<、 > 、>、 、 !函数用法和底层分析&#xff1a;函数是一个可重用的程序代码块&#xff0c;函数也代表一个任务和功能&#xff08;function&#xff09;,是代码复用的通用机制…

python开发基础戴歆第四章_第一阶段:Python开发基础 day04 课后练习

第一阶段&#xff1a;Python开发基础 day04 课后作业1.简述python的五大数据类型的作用、定义方式、使用方法数字类型字符串类型列表字典布尔型答&#xff1a;数字类型分为整型(int)和浮点型(float)&#xff1a;整型的作用&#xff1a;表示人的年龄、各种号码、级别等定义方式&…

javascript进制转换_JavaScript 加减危机——为什么会出现这样的结果?

在日常工作计算中&#xff0c;我们如履薄冰&#xff0c;但是 JavaScript 总能给我们这样那样的 surprise~0.1 0.2 &#xff1f;1 - 0.9 &#xff1f;如果小伙伴给出内心的结果&#xff1a;0.1 0.2 0.31 - 0.9 0.1那么小伙伴会被事实狠狠地扇脸&#xff1a;console.log(0.…

python与golang_Golang与python线程详解及简单实例

Golang与python线程详解及简单实例在GO中&#xff0c;开启15个线程&#xff0c;每个线程把全局变量遍历增加100000次&#xff0c;因此预测结果是 15*1000001500000.var sum intvar cccc intvar m *sync.Mutexfunc Count1(i int, ch chan int) {for j : 0; j < 100000; j {cc…

java 树状 子节点_java构建树形列表(带children属性)

/*** 树形表格工具类**authoryanggb*/public classTreeTableUtil {/*** 把列表转换为树结构**paramoriginalList 原始list数据*paramidFieldName 作为唯一标示的字段名称*parampidFieldName 父节点标识字段名*paramchildrenFieldName 子节点(列表)标识字段名*return树结构列表*…

python输出文本内容_python 打印文件里的内容

Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案 的最佳方案 标签: Android屏幕旋转AsyncTaskProgressDialog 2014-07-19 09:25 39227人阅读 评论(46) 收藏 举报 分类: [android 进阶之 ... Mysql查找所有项目开始时间比之前项目结束时间小的项目ID 这是之前遇到…

python中八皇后如何运算的_python解决八皇后算法

展开全部global col #定义一些全局变量global rowglobal pos_diagglobal nag_diagglobal countdef output(): 输出一种有效结果global countprint rowcount 1def do_queen(i): 生成所有正确解param i: 皇后的数目for j in range(0, 8): #依次62616964757a686964616fe59b9ee7ad…

java实现复制粘贴的计算器_软帝学院教你用java编写计算器(三)

教你用java编写计算器(三)import java.awt.Color;import java.awt.Dimension;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax…