package mutiDownload;

import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/**
* 多线程下载文件
* @author Administrator
*
*/
public class Demo {

public final static int threadcount=3;
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub

//获取服务器上的文件长度,在本地创建一个和服务器上的文件一样大的临时文件
String pathString="http://192.168.1.84:8091/androidServer/test.mkv";
URL url=new URL(pathString);
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setRequestMethod("GET");
int code=connection.getResponseCode();
if(code==200){ //请求成功
int length=connection.getContentLength();
System.out.println("文件长度:"+length);
RandomAccessFile ref=new RandomAccessFile("test.mkv","rwd");
//指定创建的临时文件的长度
ref.setLength(length);
ref.close();

int blocksize=length/threadcount;
for(int threadId=1;threadId<=threadcount;threadId++){
int startIndex=(threadId-1)*blocksize; //线程开始位置
int endIndex=threadId*blocksize-1;
if(threadId==threadcount){
endIndex=length;
}
System.out.println("线程"+threadId+"下载---"+startIndex+"-->"+endIndex);
new Downhread(threadId, startIndex, endIndex, pathString).start();;

}
}else{
System.out.println("服务器错误");
}

}

/**
* 下载文件子线程
* @author Administrator
*
*/
public static class Downhread extends Thread {
private int threadId;
private int startIndex;
private int endIndex;
private String path;

/**
*
* @param threadId 线程id
* @param startIndex 线程下载的开始位置
* @param endIndex
* @param path 下载文件在服务器上的位置
*/
public Downhread(int threadId, int startIndex, int endIndex, String path) {
super();
this.threadId = threadId;
this.startIndex = startIndex;
this.endIndex = endIndex;
this.path = path;
}

@Override
public void run() {
// TODO Auto-generated method stub
//super.run();
try {
URL url=new URL(path);
HttpURLConnection connection=(HttpURLConnection) url.openConnection();
connection.setConnectTimeout(5000);
connection.setRequestMethod("GET");
connection.setRequestProperty("Range", "bytes="+startIndex+"-"+endIndex);
int code=connection.getResponseCode();
System.out.println("code:"+code);
// if(code==200){ //请求成功
//
// }
InputStream is=connection.getInputStream();
RandomAccessFile raf=new RandomAccessFile("test.mkv","rwd");
//写文件的时候指定从哪个位置开始写
raf.seek(startIndex);

int len=0;
byte [] buffer=new byte[1024];
while((len=is.read(buffer))!=-1){
raf.write(buffer, 0, len);

}
is.close();
raf.close();
System.out.println("线程:"+threadId+"下载完毕了...");

} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

}

多线程下载图片,同步下载http://www.importnew.com/15731.html的更多相关文章

  1. Android开发之异步获取并下载网络资源-下载图片和下载文本内容

    在android网络开发过程中,经常需要获取网络资源,比如下载图片,下载文本文件内容等,这个时候就需要http请求来获取相应的网络资源.首先看看实例效果图:              下载图片截图   ...

  2. js 下载图片与下载文件的方式一样;保存至本地 ASP.NET 方式

    <asp:Button ID="btnDownLoad" runat="server" style="display: none" T ...

  3. c#根据路径(url)下载图片

    方法一:根据路径下载图片 1 /// <summary> /// 图片另存为 /// </summary> /// <param name="url" ...

  4. OC - GCD 队列组 - 下载图片画图

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self downloadIma ...

  5. Android中使用HttpURLConnection实现GET POST JSON数据与下载图片

    Android中使用HttpURLConnection实现GET POST JSON数据与下载图片 Android6.0中把Apache HTTP Client全部的包与类都标记为deprecated ...

  6. 使用Urllib下载图片

    urllib下载图片 urllib3下载图片 Urllib下载图片 from urllib import request import re import os # 妹子图首页 下载首页的几张 url ...

  7. iOS-ASI异步下载图片

    异步下载图片 异步下载图片ASIHTTPRequest *requestX = [ASIHTTPRequest requestWithURL:url];                 self.re ...

  8. 多线程下载图片,滑动tableView崩溃--资源抢夺问题

    最近练习使用NSoperation模拟SDWebImage下载图片,发生了崩溃的问题,还专门写博客记录这件事情: http://www.cnblogs.com/tufei7/p/7074030.htm ...

  9. iOS多线程自定义operation加载图片 不重复下载图片

    摘要:1:ios通过抽象类NSOperation封装了gcd,让ios的多线程变得更为简单易用:   2:耗时的操作交给子线程来完成,主线程负责ui的处理,提示用户的体验   2:自定义operati ...

  10. django 多线程下载图片

    example1: from multiprocessing.dummy import Pool as ThreadPool #多线程 import time import urllib2 urls ...

随机推荐

  1. 通过SQL脚本来查询SQLServer 中主外键关系

    在SQLServer中主外键是什么,以及主外键如何创建,在这里就不说了,不懂的可以点击这里,这篇文章也是博客园的博友写的,我觉得总结的很好: 此篇文章主要介绍通过SQL脚本来查看Sqlserver中主 ...

  2. [AMD驱动]解决AMD驱动的1603错误

    官方:https://www.amd.com/en/support/kb/faq/gpu-kb1603 其实把更改的文档 下载 音乐等默认目录恢复到C盘(或任意一个可访问的路径),就可以正常安装了.

  3. 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误

    团体程序设计天梯赛代码.体现代码技巧,比赛技巧.  https://github.com/congmingyige/cccc_code

  4. FreeNAS-9.10虚拟机测试安装

     虚拟机安装NreeNAS-9.10步骤 需求:网络监控磁盘要扩容 测试环境: CPU 内存 系统盘 共享盘 网卡 2核 2G 20G 20G 桥接 系统版本:FreeNAS-9.10 一.配置虚拟机 ...

  5. LFYZ-OJ ID: 1017 士兵站队问题

    分析 该题和"输油管道问题"类似,只不过由一维问题编程了二维问题.可以将总步数分解为移动到水平线y位置的总步数ysteps和移动到序列x, x+1, x+2, ... , x+n- ...

  6. oldboy s21day10

    #!/usr/bin/env python # -*- coding:utf-8 -*-   # 1.写函数,函数可以支持接收任意数字(位置传参)并将所有数据相加并返回. ''' def func(* ...

  7. 33. Springboot 系列 原生方式引入Redis,非RedisTemplate

     0.pom.xml <dependency> <groupId>redis.clients</groupId> <artifactId>jedis&l ...

  8. 使用kqueue的str_cli函数

    void str_cli(FILE *fp, int sockfd) { , isfile; char buf[MAXLINE]; ]; struct timespec ts; struct stat ...

  9. 分别基于TensorFlow、PyTorch、Keras的深度学习动手练习项目

    ×下面资源个人全都跑了一遍,不会出现仅是字符而无法运行的状况,运行环境: Geoffrey Hinton在多次访谈中讲到深度学习研究人员不要仅仅只停留在理论上,要多编程.个人在学习中也体会到单单的看理 ...

  10. ADO五大对象

     ADO.NET五大对象, 1. Connection:与数据源建立连接. 2. Command:对数据源执行SQL命令并返回结果. 3. DataReader:读取数据源的数据,只允许对将数据源以只 ...