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 数组. 存在指向该隐含数组.光标或索引,称为文件指针.输入操 ...
随机推荐
- iOS App转让流程
说法一: (1)选择转让APP (2)进入转让界面 点击Continue进入下一步 (3)输入对方的APP ID和Team ID Apple ID 和 Team ID 可以在m ...
- 绑定dropdownlist
System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(); sqlconn.C; ...
- j2ee爬坑行之二 servlet
servlet生命周期 web容器加载servlet 类 web容器调用servlet的构造函数,初始化servlet. web容器调用servlet的init()方法.注意该方法在servlet的一 ...
- 【转】第 02 天:在 Windows 平台必裝的三套 Git 工具
原文网址:https://github.com/doggy8088/Learn-Git-in-30-days/blob/master/docs/02%20%E5%9C%A8%20Windows%20% ...
- Java中BitSet使用(转)
java.util.BitSet,采用位运算: 官方API:http://docs.oracle.com/javase/7/docs/api/java/util/BitSet.html 摘要: Bit ...
- word页面不对齐,如何解决?
http://blog.163.com/haibianfeng_yr/blog/static/34572620201157105439516/
- WebMagic开源垂直爬虫介绍
WebMagic项目代码分为核心和扩展两部分.核心部分(webmagic-core)是一个精简的.模块化的爬虫实现,而扩展部分则包括一些便利的.实用性的功能.WebMagic的架构设计参照了Scrap ...
- Extjs 4.2.0 MVC 架构
内容: 1. 文件结构 2. 创建项目 3. 定义控制器 4. 定义视图 5. 控制Grid 6. 创建Model和Store 7. 通过Model保存数据 8. 保存到服务器端 大型客户端程序通常都 ...
- WIN8.1 PROBLEMS 01
win8装好后右下角显示secureboot未正确配置桌面会显示“Windows 8.1 Secure Boot未正确配置”的水印问题: 安全启动(Secure Boot)可以阻止未授权软件的运行,提 ...
- jQuery(二)
jQuery学完了!好用! 1.用定时器做的jquery里面的animate效果 <!DOCTYPE html> <html lang="en"> < ...