- 浏览: 732625 次
- 性别:
- 来自: 宁波
文章分类
- 全部博客 (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 2585需要导出的word文档是事先准备好的一个模板,文档数据所在的位 ... -
spring 4mvc下载文件的实现
2016-06-14 13:52 2544网上找到的版本较老 是spring3的 org.spring ... -
cas不同登录页面手动设置不同国际化提示
2016-05-05 09:48 1285<% org.springframework.web. ... -
实用技术解决方案博客地址记录
2016-04-14 10:35 616Jquery 将表单序列化为Json对象:http://www ... -
如果实现类似微信附近的人功能
2016-01-13 10:09 2454如果实现类似微信附近的人功能: 第一种可以使用redis-ge ... -
cxf+wss4j+mysql webservice 加密服务开发
2015-11-04 10:02 2968我采用的是cxf 加密端用的 WSS4J 服务端查询数据库 ... -
多项目集中权限管理系统 采用cas +shiro+spring mvc+mbatis+bootstrap单点登录
2015-10-13 17:37 10196流程架构图: 这里权限系统也可以理解为cas client ... -
OAuthProblemException{error='unsupported_response_type', description='Invalid re
2015-09-21 18:05 4509OAuthProblemException{error='un ... -
导出数据到excel
2014-12-08 10:10 1401/** * * @param datas 数据行 ... -
java.lang.NoSuchMethodError: org.apache.axiom.soap.SOAPEnvelope.hasFault()Z错误的解决
2014-12-05 14:21 1627axis2 运行报这个错误的原因是 要么缺少 包 ,axiom ... -
spring mvc+shiro的通用权限管理系统
2014-10-23 13:50 26827同志们 我的 spring mvc+shiro的通用权限管理系 ... -
多线程下载文件
2014-09-22 17:27 2178package mutiDownload; import ... -
java按照每周分组 改进版
2014-07-07 16:07 4287之前是按照 先把数据按月分组 然后再按周分组 这样有个问题就是 ... -
java 按照每周分组
2014-06-09 09:07 7002本例的工作应用是导入excel excel的列里有一个发布日 ... -
java计算链表、数组列表或数组中最大元素
2014-03-09 23:50 2652package com; import java.uti ... -
java 获取数组的最大值和最小值
2014-03-02 22:08 6914package com; public class St ... -
宁波java开发技术群
2014-02-17 09:54 1宁波java开发群 240974225 在宁波做java开发的 ... -
spring mvc +jdbctemplate 返回多表查询List<Bean>
2013-12-27 13:19 17757发现 hibernate做多表查询 是忒麻烦了 Spring ... -
读《大型网站技术架构:核心原理与案例分析》 后感
2013-11-26 10:36 5655大型网站软件系统有比 ... -
java拆分list
2013-11-22 09:21 2178java 将一个list平均拆成十个list,如果 list的 ...
相关推荐
"htp多线程断点下载文件"这一主题,涉及了网络编程、多线程技术和文件处理等多个知识点。 首先,HTTP(超文本传输协议)是我们浏览网页和下载文件的基础,它是应用层协议,负责客户端和服务器之间的通信。然而,...
Java多线程断点下载文件是一种高效的文件下载方式,它允许在下载过程中暂停并从上次停止的地方继续,尤其适用于大文件下载。以下是实现这一功能的关键知识点: 1. **获取文件信息**: - 使用`java.net.URL`和`java...
在Android开发中,为了提供更好的用户体验,我们常常需要实现文件的多线程断点下载功能。这不仅可以提高下载速度,还能允许用户在任何时候暂停或继续下载。本篇将重点讲解如何利用Retrofit库和GreenDao数据库来实现...
在Android开发中,多线程断点下载是一项重要的技术,特别是在处理大文件或者网络环境不稳定的情况下,能够提高下载效率并确保下载的连续性。本文将详细介绍如何在Android中实现多线程断点下载,以及如何封装一个易于...
在Android开发中,多线程断点下载是一种常见的优化策略,尤其在处理大文件时,如应用程序、视频或音频文件的下载。这种技术允许用户在任何时间暂停下载,并在稍后从停止的地方继续,而无需重新开始。在本文中,我们...
多线程断点下载是一种高效的网络数据下载技术,尤其在处理大文件时,它能显著提高下载速度并允许用户在中断后从上次停止的地方继续。这个技术在Java和Android平台上得到了广泛的应用。以下是对这一技术的详细解释: ...
在这个“Java多线程断点下载Sample”示例中,我们将深入探讨如何利用Java的多线程特性来实现文件的断点续传下载,并结合进度条展示下载进度。 首先,我们需要理解什么是多线程。在单线程环境中,程序的执行顺序是...
总之,C#实现的这个支持断点续传和多线程下载的Http Web客户端工具类通过定制HTTP请求、管理下载状态、协调多线程以及处理异常,为高效、可靠的文件下载提供了强大的功能。开发者可以根据自己的需求进一步定制和扩展...
在Android开发中,多线程断点下载是一项重要的技术,特别是在处理大文件或者网络环境不稳定的情况下,能够提高下载效率并保证用户体验。本教程主要聚焦于如何实现一个具有开始、暂停功能,并集成到ListView中的多...
【OKHttp多线程断点下载】是一种在Android或Java应用中实现高效文件下载的方法,它结合了OKHttp网络库的优秀性能与多线程技术,以提高下载速度,并允许在下载过程中中断和恢复,避免因网络问题或其他因素导致的下载...
标题“多任务多线程断点下载demo”指的是一个编程示例,它展示了如何在Android平台上实现一个功能完善的下载管理器。这个下载管理器能够同时处理多个下载任务,并且支持多线程和断点续传功能。在Android开发中,这样...
多线程下载就是将同一个网络上的原始文件根据线程个数分成均等份,然后每个单独的线程下载对应的一部分,然后再将下载好的文件按照原始文件的顺序“拼接”起来就构 成了完整的文件了。这样就大大提高了文件的下载...
Java多线程断点下载是网络编程中一个实用的技术,尤其在处理大文件时能显著提升用户体验。在本文中,我们将深入探讨这个主题,讲解如何使用Java实现多线程和断点续传功能。 首先,我们需要理解什么是多线程。在...
在IT领域,多文件多线程断点下载是一种常见的优化技术,尤其在处理大文件或者网络不稳定时,这种技术能够显著提升下载效率并提供更好的用户体验。以下是对这一主题的详细阐述: 多线程技术是并发编程的核心,它允许...
用多线程实现断点上传的功能 DeleteOverThread(); #region 初始化 string backUploadStatus = dr["BACKEND_UPLOAD_STATUS"].ToString(); //是否上传成功或取消 if (backUploadStatus == Status.Upload_...
在Android应用开发中,实现多线程断点续传下载是一项重要的技术,它涉及到网络编程、文件操作以及并发处理等多个方面。以下将详细介绍这个主题的相关知识点。 首先,我们需要理解“多线程”。在Android系统中,为了...
在Android开发中,进行大文件下载时,为了提高效率并充分利用设备资源,通常会采用多线程下载技术。此外,为了提升用户体验,断点续传功能也显得尤为重要,尤其是在网络不稳定或者用户中断下载后,可以从上次停止的...
在Android开发中,多线程断点下载以及进度实时更新是一项重要的技术,它涉及到网络编程、文件操作和UI更新等多个方面。以下是对这个主题的详细解释: **多线程下载**: 多线程下载是为了提高文件下载速度和效率。...