Java实现多线程下载
package cn.test.DownLoad; import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL; public class MultiPart {
public void down() throws Exception
{
//1、声明URL
String fileName="a.rar";
String path="http://localhost:8080/day23_MultiThreadDownLoad/file/"+fileName;
URL url=new URL(path);
//2、返回连接对象
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
//3、设置请求类型
conn.setRequestMethod("GET");
//4、设置允许接收消息
conn.setDoInput(true);
//5、连接
conn.connect();
//6、状态码
int code=conn.getResponseCode();
if(code==200)
{
int sum=conn.getContentLength();//总长度
String downFile="d:\\"+fileName;
//7、创建一个相同大小的空文件
RandomAccessFile file=new RandomAccessFile(new File(downFile), "rw");
file.setLength(sum);
file.close();
//8、声明线程数量
int threadCount=3;
//9、声明每个线程的下载量
int threadSize=sum/threadCount+((sum%threadCount==0)?0:1);
for(int i=0;i<threadCount;i++)
{
int start=i*threadSize;
int end=start+threadSize-1;
System.out.println("线程: "+i+" : "+start+" : "+end);
//10、启动线程
new myThread(start,end,downFile,url).start();
}
}
//11、关闭连接
conn.disconnect();
} public static void main(String[] args) {
try {
new MultiPart().down();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("OK");
}
} class myThread extends Thread
{
private int start;
private int end;
private String downFile;
private URL url;
public myThread(int start, int end, String downFile, URL url) {
this.start = start;
this.end = end;
this.downFile = downFile;
this.url = url;
} public void run() {
try {
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
//设置从哪里下载。断点
conn.setRequestProperty("range", "bytes="+start+"-"+end);
conn.connect();
int code=conn.getResponseCode();
if(code==206)
{
int size=conn.getContentLength();
InputStream in=conn.getInputStream();
//写同一文件
RandomAccessFile file=new RandomAccessFile(new File(downFile), "rw");
//设置从文件的哪里开始写
file.seek(start);
byte[] b=new byte[1024];
int len=-1;
while((len=in.read(b))!=-1)
{
file.write(b, 0, len);
}
file.close();
}
conn.disconnect(); } catch (Exception e) {
e.printStackTrace();
}
}
}
Java实现多线程下载的更多相关文章
- Java实现多线程下载,支持断点续传
完整代码:https://github.com/iyuanyb/Downloader 多线程下载及断点续传的实现是使用 HTTP/1.1 引入的 Range 请求参数,可以访问Web资源的指定区间的内 ...
- Java实现多线程下载 URL以及URLConnection
主线程: public class MultiThreadDown { public static void main(String[] args) throws Exception{ //初始化Do ...
- 【Java EE 学习 22 下】【单线程下载】【单线程断点下载】【多线程下载】
一.文件下载简述 1.使用浏览器从网页上下载文件,Servlet需要增加一些响应头信息 (1)response.setContentType("application/force-downl ...
- Java 仿迅雷多线程下载
package net.webjoy.jackluo.android_json; /** * 1.http Range "bytes="+ start+end * 2.Random ...
- JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)
本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...
- JAVA多线程下载网络文件
JAVA多线程下载网络文件,开启多个线程,同时下载网络文件. 源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...
- Java开发之多线程下载和断点续传
代码实现了多线程下载和断点续传功能 import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream ...
- java多线程下载和断点续传
java多线程下载和断点续传,示例代码只实现了多线程,断点只做了介绍.但是实际测试结果不是很理想,不知道是哪里出了问题.所以贴上来请高手修正. [Java]代码 import java.io.File ...
- Java之多线程断点下载的实现
RandomAccessFile类: 此类的实例支持对随机訪问文件的读取和写入.随机訪问文件的行为相似存储在文件系统中的一个大型 byte 数组. 存在指向该隐含数组.光标或索引,称为文件指针.输入操 ...
随机推荐
- 之前C#代码的重新设计
/* 我用python重构了一把这个代码 大家的反应似乎是过度设计了 好吧,我决定不那么激进,采用更中庸一些的重构 我也有些疑惑: 是否如果重构后的代码比重构前要多,就算过度了呢? */ void m ...
- Solr4.8.0源码分析(7)之Solr SPI
Solr4.8.0源码分析(7)之Solr SPI 查看Solr源码时候会发现,每一个package都会由对应的resources. 如下图所示: 一时对这玩意好奇了,看了文档以后才发现,这个serv ...
- 转:Google论文之三----MapReduce
文章来自于:http://www.cnblogs.com/geekma/p/3139823.html MapReduce:大型集群上的简单数据处理 摘要 MapReduce是一个设计模型,也是一个处理 ...
- 上海招聘FPGA讲师(专兼职均可)
上海招聘FPGA讲师(专兼职均可) 招聘FPGA培训讲师(专兼职均可) 诚聘FPGA培训讲师_软件无线电方向 ◆精通FPGA设计方法及技巧 ◆精通无线电知识及System View设计方法,有基于Sy ...
- 关于.net的概念
IIS不仅仅是asp.net还有php等 所以w3wp是基本单元. 然后Managed Code加载 AppDomain, 不管是桌面程序还是asp.net程序 System.Web(HttpRunt ...
- POJ2503 Babelfish
题目链接. 分析: 应当用字典树,但stl的map做很简单. #include <iostream> #include <cstdio> #include <cstdli ...
- android判断应用是否有某个权限
1) 判断应用是否具有某个权限 PackageManager pm = getPackageManager(); boolean permission = (PackageManager.PERMIS ...
- [置顶] Android开发之ProcessState和IPCThreadState类分析
在Android中ProcessState是客户端和服务端公共的部分,作为Binder通信的基础,ProcessState是一个singleton类,每个 进程只有一个对象,这个对象负责打开Binde ...
- IE 文档模型设置 免去你IE 按F12去调文档标准的烦恼。
英文原文:http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx 最近在做一个前端页面,在各种浏览器上,各种差异,各种无赖.各种郁闷. ...
- [转] PostgreSQL学习手册(数据表)
from: http://www.cnblogs.com/stephen-liu74/archive/2012/04/23/2290803.html 一.表的定义: 对于任何一种关系型数据库而言,表都 ...