只是记录一下,java多线程下载,没有断点续传,
其实可以加,只是今天没有精力了,
思路就是,每次下载一段之后保存下进度,下次启动的时候读一下进度就可以了。
package com.hung.main; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.HttpClientBuilder; public class Main { private static boolean ISDEBUG = false; private static int ThreadCound = 3; public static void main(String[] args) throws ClientProtocolException, IOException { String path = "http://192.168.1.162:8081/test.exe"; HttpClient hc = HttpClientBuilder.create().build(); HttpGet hg = new HttpGet(path); HttpResponse hr = hc.execute(hg); int stauts = hr.getStatusLine().getStatusCode(); if (200 != stauts) { System.out.println("请求失败,状态码:" + stauts); return; } long length = hr.getEntity().getContentLength(); RandomAccessFile raf = new RandomAccessFile("test.exe", "rwd"); raf.setLength(length); raf.close(); long blockSize = length / ThreadCound; System.out.println("总长度:" + length + " 块长度: " + blockSize); for (int i = 1; i <= ThreadCound; i++) { long starIndex = (i - 1) * blockSize; long endIndex = i * blockSize - 1; if (i == ThreadCound) { // 从0开始,所以结尾应该是总长度 -1 endIndex = length - 1; } new MyThread(path, starIndex, endIndex).start(); } } private static class MyThread extends Thread { private String url; private long start; private long end; private String threadName; public MyThread(String url, long start, long end) { this.url = url; this.start = start; this.end = end; if(ISDEBUG){ System.out.println("下载范围:" + start + " ~ " + end); } } @Override public void run() { threadName = Thread.currentThread().getName(); try { RandomAccessFile raf = new RandomAccessFile("test.exe", "rwd"); HttpClient hc = HttpClientBuilder.create().build(); HttpGet hg = new HttpGet(url); hg.setHeader("Range", "bytes=" + start + "-" + end); HttpResponse hr = hc.execute(hg); int status = hr.getStatusLine().getStatusCode(); if (status < 200 || 299 < status) { System.out.println(threadName + " 请求失败"); return; } if (ISDEBUG) { String s1 = threadName + "状态码:" + status; System.out.println(s1); long l = hr.getEntity().getContentLength(); String s2 = threadName + "内容长度:" + l; System.out.println(s2); } InputStream is = hr.getEntity().getContent(); raf.seek(start); int i = 0; long total = 0; byte[] bs = new byte[1024 * 8]; while ((i = is.read(bs)) != -1) { raf.write(bs, 0, i); total += i; // System.out.println(Thread.currentThread().getName() // +" 下载进度 : " + total); } raf.close(); is.close(); System.out.println(threadName + " 下载完成"); } catch (IOException e) { e.printStackTrace(); } } } }
相关推荐
java多线程下载器,可以用java实现多线程下载功能
Java多线程下载Java多线程下载Java多线程下载Java多线程下载Java多线程下载
用java实现多线程下载,可以学习参考呵呵
Java多线程下载器
java多线程下载源代码 java多线程下载源代码
采用apache commons开发包,实现了FTP多线程下载,并有简单的包括进度条的界面,代码的运行:1 把自己的PC配置成FTP服务器(只需下载Serc-U软件)2 建立用户,用户名:zhangyu,密码:123,设置根目录,并拷贝进一些...
java实现多线程下载文件功能,通过线程池管理,实现下载文件速度快,安全。
JAVA多线程端点续传下载JAVA多线程端点续传下载JAVA多线程端点续传下载JAVA多线程端点续传下载JAVA多线程端点续传下载JAVA多线程端点续传下载JAVA多线程端点续传下载JAVA多线程端点续传下载JAVA多线程端点续传下载...
java多线程PPT 多线程基本概念 创建线程的方式 线程的挂起与唤醒 多线程问题
java 编写的一个 http 多线程 下载器
Java多线程 断续 重新连接 下载。。。。。。。。。。。
1. 把每个下载文件切成若干个块...2. HTTP Header里增加Range,如果服务器返回Cotent-Range 说明服务器支持文件定位,可以实现多线程下载 详细看这里 http://blog.csdn.net/maoxiang/archive/2010/04/02/5446293.aspx
刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...
java多线程断点下载文件 ,文档介绍及代码实现
全部写在一个类中,为第一次交的作业,代码有点乱,但能运行,可以实现多线程下载
本程序是在原有基础上逐步完善的,第一版:http://download.csdn.net/detail/zpwmhx/4342943 第二版:http://download.csdn.net/detail/zpwmhx/4505209 详细文档请看: ...
这个是关于Java多线程方面的技术,就是多个线程发送请求,从互联网上下载图片资源,通过这个案例可以知道Java中的多线程的基础知识
利用JAVA编写的多线程运行实例 压缩文件,可直接运行 ...利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行利用JAVA编写的多线程运行实例 压缩文件,可直接运行
介绍多线程下载图片,异步下载多线程,方便处理多个图片的同时下载和处理