- 浏览: 733543 次
- 性别:
- 来自: 宁波
文章分类
- 全部博客 (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
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(); } } } }
评论
4 楼
zqb666kkk
2014-09-23
liujiafei_2007 写道
RandomAccessFile ref=new RandomAccessFile("test.mkv","rwd");
//指定创建的临时文件的长度
ref.setLength(length);
ref.close();
你好,请问main方法中的这三行有什么作用呢?
//指定创建的临时文件的长度
ref.setLength(length);
ref.close();
你好,请问main方法中的这三行有什么作用呢?
RandomAccessFile("test.mkv","rwd"); //
RandomAccessFile
public RandomAccessFile(File file,
String mode)
throws FileNotFoundException
创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。将创建一个新的 FileDescriptor 对象来表示此文件的连接。
mode 参数指定用以打开文件的访问模式。允许的值及其含意为:
值
含意
"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
"rws" 和 "rwd" 模式的工作方式极其类似 FileChannel 类的 force(boolean) 方法,分别传递 true 和 false 参数,除非它们始终应用于每个 I/O 操作,并因此通常更为高效。如果该文件位于本地存储设备上,那么当返回此类的一个方法的调用时,可以保证由该调用对此文件所做的所有更改均被写入该设备。这对确保在系统崩溃时不会丢失重要信息特别有用。如果该文件不在本地设备上,则无法提供这样的保证。
"rwd" 模式可用于减少执行的 I/O 操作数量。使用 "rwd" 仅要求更新要写入存储的文件的内容;使用 "rws" 要求更新要写入的文件内容及其元数据,这通常要求至少一个以上的低级别 I/O 操作。
如果存在安全管理器,则使用 file 参数的路径名作为其参数调用它的 checkRead 方法,以查看是否允许对该文件进行读取访问。如果该模式允许写入,那么还使用该路径参数调用该安全管理器的 checkWrite 方法,以查看是否允许对该文件进行写入访问。
-----引自jdk 1.6api
其实上面这三个主要是迅雷的下载原理 就是下载之前 先在本地创建一个和服务器上一样大的临时文件 并且指定 随机访问文件的操作权限 为 rwd 然后做完这一步后关闭此随机访问文件流并释放与该流关联的所有系统资源
3 楼
zqb666kkk
2014-09-23
cywhoyi 写道
挺好的多线程案例,我想询问以下几个问题,如果不对之处,望谅解
1.其实这样length分开略显不公平,譬如中华人民共和国1234567,其实前者thread的io消耗更大
2.看得出来是用来爬数据用,因为主线和子线都是同步,是否对于cpu\memory要求很高,是否模拟用异步任务来
3.每个线程其实都是独立分开的,在写文件时候,如何保证是append的?
1.其实这样length分开略显不公平,譬如中华人民共和国1234567,其实前者thread的io消耗更大
2.看得出来是用来爬数据用,因为主线和子线都是同步,是否对于cpu\memory要求很高,是否模拟用异步任务来
3.每个线程其实都是独立分开的,在写文件时候,如何保证是append的?
下载的时候三个线程 各自负责一个区域 三个区域拼成一个完整的文件
2 楼
cywhoyi
2014-09-22
挺好的多线程案例,我想询问以下几个问题,如果不对之处,望谅解
1.其实这样length分开略显不公平,譬如中华人民共和国1234567,其实前者thread的io消耗更大
2.看得出来是用来爬数据用,因为主线和子线都是同步,是否对于cpu\memory要求很高,是否模拟用异步任务来
3.每个线程其实都是独立分开的,在写文件时候,如何保证是append的?
1.其实这样length分开略显不公平,譬如中华人民共和国1234567,其实前者thread的io消耗更大
2.看得出来是用来爬数据用,因为主线和子线都是同步,是否对于cpu\memory要求很高,是否模拟用异步任务来
3.每个线程其实都是独立分开的,在写文件时候,如何保证是append的?
1 楼
liujiafei_2007
2014-09-22
RandomAccessFile ref=new RandomAccessFile("test.mkv","rwd");
//指定创建的临时文件的长度
ref.setLength(length);
ref.close();
你好,请问main方法中的这三行有什么作用呢?
//指定创建的临时文件的长度
ref.setLength(length);
ref.close();
你好,请问main方法中的这三行有什么作用呢?
发表评论
-
java word导出
2016-06-30 08:49 2589需要导出的word文档是事先准备好的一个模板,文档数据所在的位 ... -
spring 4mvc下载文件的实现
2016-06-14 13:52 2549网上找到的版本较老 是spring3的 org.spring ... -
cas不同登录页面手动设置不同国际化提示
2016-05-05 09:48 1289<% org.springframework.web. ... -
实用技术解决方案博客地址记录
2016-04-14 10:35 630Jquery 将表单序列化为Json对象:http://www ... -
如果实现类似微信附近的人功能
2016-01-13 10:09 2461如果实现类似微信附近的人功能: 第一种可以使用redis-ge ... -
cxf+wss4j+mysql webservice 加密服务开发
2015-11-04 10:02 2970我采用的是cxf 加密端用的 WSS4J 服务端查询数据库 ... -
多项目集中权限管理系统 采用cas +shiro+spring mvc+mbatis+bootstrap单点登录
2015-10-13 17:37 10197流程架构图: 这里权限系统也可以理解为cas client ... -
OAuthProblemException{error='unsupported_response_type', description='Invalid re
2015-09-21 18:05 4522OAuthProblemException{error='un ... -
导出数据到excel
2014-12-08 10:10 1407/** * * @param datas 数据行 ... -
java.lang.NoSuchMethodError: org.apache.axiom.soap.SOAPEnvelope.hasFault()Z错误的解决
2014-12-05 14:21 1628axis2 运行报这个错误的原因是 要么缺少 包 ,axiom ... -
spring mvc+shiro的通用权限管理系统
2014-10-23 13:50 26828同志们 我的 spring mvc+shiro的通用权限管理系 ... -
多线程断点下载文件
2014-09-23 15:46 1231所谓多线程断点下载 :就是当某个文件下了一部分后突然断电了,或 ... -
java按照每周分组 改进版
2014-07-07 16:07 4290之前是按照 先把数据按月分组 然后再按周分组 这样有个问题就是 ... -
java 按照每周分组
2014-06-09 09:07 7004本例的工作应用是导入excel excel的列里有一个发布日 ... -
java计算链表、数组列表或数组中最大元素
2014-03-09 23:50 2658package com; import java.uti ... -
java 获取数组的最大值和最小值
2014-03-02 22:08 6918package com; public class St ... -
宁波java开发技术群
2014-02-17 09:54 1宁波java开发群 240974225 在宁波做java开发的 ... -
spring mvc +jdbctemplate 返回多表查询List<Bean>
2013-12-27 13:19 17762发现 hibernate做多表查询 是忒麻烦了 Spring ... -
读《大型网站技术架构:核心原理与案例分析》 后感
2013-11-26 10:36 5658大型网站软件系统有比 ... -
java拆分list
2013-11-22 09:21 2181java 将一个list平均拆成十个list,如果 list的 ...
相关推荐
通过上述步骤,我们可以实现一个高效的多线程文件下载器。这个过程涉及到的知识点包括:线程与线程池、异步编程、文件I/O、HTTP范围请求、异常处理和进度更新。这些知识对于任何希望深入理解C#并发编程和网络编程的...
首先,多线程下载文件是一种提高下载速度的方法,通过将大文件分成多个小部分,每个部分由一个单独的线程负责下载,从而充分利用多核处理器的并行处理能力。在Java中,我们可以使用`java.util.concurrent`包中的`...
在Android开发中,多线程下载文件是一种常见的优化策略,特别是在处理大文件或者网络环境不稳定的情况下,能够提高下载效率并减少资源浪费。本项目提供的就是一个实现了多线程断点续传功能的Android下载器,它包含...
通过以上步骤,我们可以设计并实现一个高效的多线程文件下载系统。在实际项目中,还可以考虑使用成熟的库,如Apache HttpClient或OkHttp,它们提供了对多线程下载的良好支持。同时,结合Java的并发库,可以构建出更...
在Android应用开发中,多线程下载文件是一个常见的需求,特别是在处理大文件或者需要优化用户体验时。这个场景中,我们采用多线程技术来提高下载效率,并且支持断点续传功能,这意味着如果下载过程中因网络问题中断...
可以多线程下载文件c++的客户端软件,可以切割文件并传输
在C#编程中,多线程技术是一种提升应用程序性能的有效方式,特别是在处理耗时操作如文件下载时。本文将深入探讨如何使用C#实现多线程下载文件,并基于提供的源码进行分析和学习。 首先,多线程的概念是并发执行多个...
在C#编程中,多线程技术是一种提升应用程序性能的有效方式,特别是在处理耗时操作如大文件下载时。本文将深入探讨如何利用C#实现多线程下载文件,并结合给出的"多线程下载文件"项目,理解其工作原理。 首先,让我们...
这个"多线程分别下载文件"的Demo是针对在ListView或GridView控件中实现的一项功能,允许用户选择多个文件进行并行下载,并且每个文件的下载进度可以在对应的列表项中实时更新,提供良好的用户体验。 首先,我们要...
在Android应用开发中,多线程技术是必不可少的,特别是在处理耗时操作,如网络请求、文件下载等场景。本文将深入探讨如何在Android中实现多线程下载文件的实例。 首先,我们要理解多线程的基本概念。在单线程环境中...
本项目"qt多线程高效下载文件"是基于Qt实现的一个实用工具,它利用多线程技术来提高文件下载的效率,特别是对于大文件或者需要同时下载多个文件的场景,这种多线程策略显得尤为重要。 在HTTP协议方面,它是互联网上...
### Java多线程断点下载文件:关键技术与实现 在当今高速互联网环境下,高效的数据传输技术变得至关重要。Java多线程断点续传文件下载技术就是一种能够显著提高下载速度和稳定性的方法。本文将深入解析Java多线程...
下面我们将详细讲解如何使用VB创建一个简单的多线程文件下载程序。 首先,我们需要创建一个新的线程来执行下载任务。在VB中,我们可以创建一个`Thread`对象,并为其传递一个委托(Delegate),这个委托指向要在线程...
在Delphi7中,开发多线程下载文件的应用程序是一项技术含量较高的任务,涉及到并发处理、网络通信以及文件I/O等多个方面。在这个场景下,我们通常会利用Indy10库,尤其是其中的IdHTTP组件来实现网络请求,再结合多...
在IT领域,网络数据传输是不可或缺的一部分,而断点续传和多线程下载技术则大大提升了文件下载的效率和用户体验。"htp多线程断点下载文件"这一主题,涉及了网络编程、多线程技术和文件处理等多个知识点。 首先,...
在多线程文件下载中,我们可以为每个线程创建一个Socket,分别与服务器保持连接,实现文件的分块下载。 2. HTTP:超文本传输协议是互联网上应用最广泛的一种网络协议。HTTP支持断点续传功能,非常适合大文件的下载...
在Java编程中,多线程下载文件是一种优化大文件下载效率的技术。它通过将一个大文件分割成多个小部分,然后在不同的线程中并行下载这些部分,从而充分利用网络带宽,加快下载速度。本源码实现了这样一个功能,让下载...
写一个多线程分块下载文件工具。网上的一些代码可能会有些奇怪的问题,用的是类全局变量打开文件但在多线程中并未加锁,会导致文件有一定几率出现大小和源文件不同,即使文件大小相同,MD5值也不同,中间有一段是坏的...
在C# Winform应用中实现多线程下载是一项常见的任务,尤其在处理大文件或需要提高下载速度的情况下。本文将详细讲解如何利用C#的多线程技术来创建一个Winform应用程序,实现高效的文件下载功能。 首先,我们需要...