- 浏览: 726097 次
- 性别:
- 来自: 宁波
文章分类
- 全部博客 (125)
- 软件开发 (17)
- java (32)
- js (2)
- jsp (1)
- struts2 (1)
- jquery (4)
- oracle (12)
- 程序员 (2)
- 三星i9300 联通版 root (1)
- easyui (2)
- DOM4J (2)
- 哲学 (1)
- ftp (1)
- oracle每日一学 (2)
- spring (4)
- jquery每日一学 (5)
- shiro (4)
- ITextRenderer (1)
- shiro标签 (1)
- mysql (1)
- mysql每日一学 (4)
- 分词 (1)
- vtiger crm (1)
- IkAnalyzer (1)
- jsoup (1)
- 多线程 (1)
- quartz (1)
- ubuntu (2)
- gradle学习笔记 (1)
- node.js (1)
- ajax (1)
- mybatis (1)
- cas (2)
- cxf (1)
- jqgrid (1)
- 开发工具破解 (1)
最新评论
-
氵每市蜃木娄:
使用过后,移动滚动条,非冻结的列,表头不见了。
easyui datagrid 右冻结 -
18335864773:
推荐用pageoffice组件打开文档,pageoffice ...
java word导出 -
xiaoliuf4565:
用过之后中文可以换行,但是现在编程了英文和数字不换行了脑壳痛
freemarker+ITextRenderer 生成html转pdf -
A741841403:
Error:(275, 29) java: 无法访问com.l ...
freemarker+ITextRenderer 生成html转pdf -
A741841403:
楼主你好,我想问下,如何在maven中使用你的jar包呢
freemarker+ITextRenderer 生成html转pdf
所谓多线程断点下载 :就是当某个文件下了一部分后突然断电了,或者下载程序暂停了,再次运行下载 可以继续下载,而不是重新下载 的一个执行过程。
基本模拟了迅雷下载的原理
本次功能用java实现 :
利用txt文件记录下载的状态 如果在安卓端的话 可以改成用数据库记录下载状态
本程序可以扩展为具有良好用户体验的 下载程序
基本模拟了迅雷下载的原理
本次功能用java实现 :
利用txt文件记录下载的状态 如果在安卓端的话 可以改成用数据库记录下载状态
本程序可以扩展为具有良好用户体验的 下载程序
package mutiDownload; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; 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 BreakpointDoloadDemo { public static int threadcount = 3; public static int threadRunning = 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 { //检查是否存在记录下载长度的文件,如果存在读取文件的数据 File tempFile=new File(threadId+".txt"); if(tempFile.exists()&&tempFile.length()>0){ FileInputStream fis=new FileInputStream(tempFile); byte [] temp=new byte[1024]; int leng=fis.read(temp); String downloadLen=new String(temp,0,leng); int downloadInt=Integer.parseInt(downloadLen); startIndex=downloadInt; //修改下载的真实开始位置 } URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url .openConnection(); connection.setConnectTimeout(5000); connection.setRequestMethod("GET"); connection.setRequestProperty("Range", "bytes=" + startIndex + "-" + endIndex); System.out.println("线程真实下载位置:" + threadId + "startIndex:" + 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]; int total = 0; // 已经下载的数据长度 // File file=new File(threadId+".txt"); //作用:记录当前线程下载的数据长度 while ((len = is.read(buffer)) != -1) { RandomAccessFile file = new RandomAccessFile(threadId + ".txt", "rwd"); raf.write(buffer, 0, len); total += len; //System.out.println("线程:" + threadId + "total:" + total); file.write(String.valueOf(total+startIndex).getBytes()); //记录下载的位置 file.close(); } is.close(); raf.close(); System.out.println("线程:" + threadId + "下载完毕了..."); // File delfile =new File(threadId+ ".txt"); // delfile.delete(); //当线程下载完毕后清除记录文件 } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ threadRunning--; if(threadRunning==0){ //所有线程执行完毕 for(int i=0;i<=3;i++){ File file =new File(i+ ".txt"); file.delete(); } System.out.println("文件下载完毕,删除所有记录文件"); } } } } }
发表评论
-
java word导出
2016-06-30 08:49 2540需要导出的word文档是事先准备好的一个模板,文档数据所在的位 ... -
spring 4mvc下载文件的实现
2016-06-14 13:52 2480网上找到的版本较老 是spring3的 org.spring ... -
cas不同登录页面手动设置不同国际化提示
2016-05-05 09:48 1225<% org.springframework.web. ... -
实用技术解决方案博客地址记录
2016-04-14 10:35 539Jquery 将表单序列化为Json对象:http://www ... -
如果实现类似微信附近的人功能
2016-01-13 10:09 2395如果实现类似微信附近的人功能: 第一种可以使用redis-ge ... -
cxf+wss4j+mysql webservice 加密服务开发
2015-11-04 10:02 2920我采用的是cxf 加密端用的 WSS4J 服务端查询数据库 ... -
多项目集中权限管理系统 采用cas +shiro+spring mvc+mbatis+bootstrap单点登录
2015-10-13 17:37 10123流程架构图: 这里权限系统也可以理解为cas client ... -
OAuthProblemException{error='unsupported_response_type', description='Invalid re
2015-09-21 18:05 4423OAuthProblemException{error='un ... -
导出数据到excel
2014-12-08 10:10 1356/** * * @param datas 数据行 ... -
java.lang.NoSuchMethodError: org.apache.axiom.soap.SOAPEnvelope.hasFault()Z错误的解决
2014-12-05 14:21 1572axis2 运行报这个错误的原因是 要么缺少 包 ,axiom ... -
spring mvc+shiro的通用权限管理系统
2014-10-23 13:50 26774同志们 我的 spring mvc+shiro的通用权限管理系 ... -
多线程下载文件
2014-09-22 17:27 2125package mutiDownload; import ... -
java按照每周分组 改进版
2014-07-07 16:07 4243之前是按照 先把数据按月分组 然后再按周分组 这样有个问题就是 ... -
java 按照每周分组
2014-06-09 09:07 6949本例的工作应用是导入excel excel的列里有一个发布日 ... -
java计算链表、数组列表或数组中最大元素
2014-03-09 23:50 2607package com; import java.uti ... -
java 获取数组的最大值和最小值
2014-03-02 22:08 6858package com; public class St ... -
宁波java开发技术群
2014-02-17 09:54 1宁波java开发群 240974225 在宁波做java开发的 ... -
spring mvc +jdbctemplate 返回多表查询List<Bean>
2013-12-27 13:19 17713发现 hibernate做多表查询 是忒麻烦了 Spring ... -
读《大型网站技术架构:核心原理与案例分析》 后感
2013-11-26 10:36 5613大型网站软件系统有比 ... -
java拆分list
2013-11-22 09:21 2128java 将一个list平均拆成十个list,如果 list的 ...
相关推荐
htp多线程断点下载文件 线程数量并不代表下载的速度喔。
Java多线程断点下载文件,可以运行的,
用多线程实现断点上传的功能 DeleteOverThread(); #region 初始化 string backUploadStatus = dr["BACKEND_UPLOAD_STATUS"].ToString(); //是否上传成功或取消 if (backUploadStatus == Status.Upload_...
多文件多线程断点下载,模仿慕课多线程多文件下载教程
Java 多线程断点下载文件基本原理:利用URLConnection获取要下载文件的长度、头部等相关信息,并设置响应的头部信息,本文将详细介绍,需要了解更多的朋友可以参考下
java关于多线程断点下载的demo
自己写的Android多线程多任务断点下载的一个Demo。 1.通过Service和线程池配合控制下载任务(包含分段下载)的开始和暂停; 2.通过数据库对文件信息以及下载线程信息进行保存,实现断点下载。 有发现的bug希望各路坛...
Android实现网络多线程下载,断点续传,压缩包内有两个项目: downloadDemo:多线程下载 MulThreadDownloader:断点续传(网上别人的项目)
Aandroid 多线程断点续传同时下载多个大文件
java中多线程下载学习,又新增了断点的实现,可以实现暂停继续下载网络文件的功能
《Android多线程断点续传下载网络上的音/视频等各种文件》多线程,断点续传,各种网络上的数据,下载网络上的数据时基本功!加油了各位!
可设置下载的线程数、下载任务的线程函数、多线程断点续传下载一个文件、关于BOOL bForceDownload/*=FALSE*/的定义,如果为 TRUE 表示强制性重新下载,以下载的部分将会被删除,FALSE 表示断点续传,并创建多线程...
Android多线程断点文件下载和暂停源码,Android开发必备
C#多线程下载文件工具,可添加多任务,带断点续传功能
android Http实现文件多线程断点下载
FTP、HTTP 多线程断点续传下载文件.rar
多线程断点式下载示例代码,再分享一个Java 多线程断点式下载模块,主要原理是: 把context分为poolSize段,计算每段的长度。如果文件已存在,根据临时文件中记载的线程数量,继续上次的任务,如果下载的目标文件不...
python多线程,断点续传下载程序,功能比较简单,可以进行二次开发。实现更好用的 功能。
OKHttp带进度条多线程断点下载,管理我们的下载任务包括、添加下载任务、开始下载、暂停下载、重新下载等功能,简单实用