文件下载这种操作经常会出现,当文件较大的时候,假如不采用多线程断点下载,那么当下载到一半出错或者暂停的话,就需要从最开始重新来下载了,这点是没什么必要的,因为我们完全可以从上一次出错的地方继续下载,就像迅雷一样,我们下载文件的时候,不可能中途出现错误再次开始的时候从整个文件的开始下载,如果你平时下载细致的话会发现迅雷下载的过程中都有一个临时文件的存在,这个临时文件存放的就是你已经下载到文件的哪个字节啊,下载时间啊之类的信息以便于你暂停或者出错之后能够从断点继续下载
多线程断点下载:顾名思义是用多线程实现的,断点是当第三方因素(断电、断网等)中断下载时,下次下载可以继续上次下载的地方下载。
1、通过getContentLength可以获取要下载文件的大小,这样可以在本机上创建一个相同大小的文件用来下载。
int fileLength = connection.getContentLength();
2、由于是多线程,所以要给每一个线程均分分配要下载的位置。
for(int i = 0; i < threadCount; i ++) { int startThread = i * blockSize; int endThread = (i + 1) * blockSize - 1; if( i == blockSize - 1) endThread = fileLength -1; new DownloadThread(i, startThread, endThread).start(); }
3、启动每个线程下载时,请求头需要Range参数,值是bytes:xxx-xxx某事。比如"Range:0-10100",代表要下载的位置是从0到10100。
connection.setRequestProperty("Range", "bytes:"+startThred+"-" + endThread);
4、然后每次用RandomAccessFile写入数据到本机文件里。
while((length = inputStream.read(buffer)) != -1) { randomAccessFile.write(buffer, 0, length); }
5、当然每次下载时需要记录本线程下载了多少,以便断点时,下载的时候可以从下次下载的地方下载。
total += length; int currentThreadPostion = startThred + total; RandomAccessFile randomAccessFile2 = new RandomAccessFile(file, "rwd"); randomAccessFile2.write(String.valueOf(currentThreadPostion).getBytes()); randomAccessFile2.close();
相关推荐
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据
java多线程文件传输 java多线程文件传输
java多线程下载源代码 java多线程下载源代码
刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...
演示了JAVA中的多线程 界面简单 需要请拿去
针对操作系统中多线程部分知识开发的一个案例,有助于更好的理解线程
java实现多线程下载文件功能,通过线程池管理,实现下载文件速度快,安全。
Java代码,根据URL方式下载单个文件或者图片,根据文件大小进行分批启动多线程下载!
Java多线程断点下载文件,可以运行的,
实现了FTP多线程下载,并有简单的包括进度条的界面,代码的运行:1 把自己的PC配置成FTP服务器(只需下载Serc-U软件)2 建立用户,用户名:zhangyu,密码:123,设置根目录,并拷贝进一些文件(这就是FTP服务器上的要...
实现文件多线程下载,可以指定下载线程数。可以用于学习
新鲜出炉的SpringBoot版本的多线程下载文件,可以拿来整合SpringBoot项目或者SSM项目,可直接运行测试!!!
本程序是在原有基础上逐步完善的,第一版:http://download.csdn.net/detail/zpwmhx/4342943 第二版:http://download.csdn.net/detail/zpwmhx/4505209 ...本程序很适合在主机间批量传输文件和目录,参数可控
java多线程断点下载文件 ,文档介绍及代码实现
主要介绍了Java多线程文件分片下载实现的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
java多线程加队列上传文件_后台处理
2.计算出每个线程下载的大小(开始位置,结束位置) a)计算出每个线程下载的大小 b)for循环,计算出每个线程的开始、结束位置 c)最后一个线程处理 3.每创建好一次就要开启线程下载 a)构造方法 b)通过URL对象的open...
JAVA-多线程 所有文件
Java 单线程复制文件和使用RandomAccessFile多线程复制文件的比较,对应博客地址为http://blog.csdn.net/zmichealchow/article/details/38687431