`
gaojingsong
  • 浏览: 1182263 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【JAVA 之文件多线程下载】

阅读更多

文件下载这种操作经常会出现,当文件较大的时候,假如不采用多线程断点下载,那么当下载到一半出错或者暂停的话,就需要从最开始重新来下载了,这点是没什么必要的,因为我们完全可以从上一次出错的地方继续下载,就像迅雷一样,我们下载文件的时候,不可能中途出现错误再次开始的时候从整个文件的开始下载,如果你平时下载细致的话会发现迅雷下载的过程中都有一个临时文件的存在,这个临时文件存放的就是你已经下载到文件的哪个字节啊,下载时间啊之类的信息以便于你暂停或者出错之后能够从断点继续下载



 

 

 

 

多线程断点下载:顾名思义是用多线程实现的,断点是当第三方因素(断电、断网等)中断下载时,下次下载可以继续上次下载的地方下载。

 

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();
  • 大小: 34.4 KB
0
0
分享到:
评论

相关推荐

    Java实现文件的多线程下载

    在本案例中,我们将探讨如何使用Java实现文件的多线程下载,这对于处理大文件或者在网络带宽有限的情况下尤其有用。通过多线程下载,可以将文件分割成多个部分并同时下载,从而缩短整体下载时间。 首先,我们需要...

    Java多线程设计模式上传文件

    Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...

    java 多线程下载 (单文件)

    Java多线程下载技术主要应用于提高大文件下载的效率,通过将文件分割成多个部分,同时启动多个线程分别下载这些部分,从而实现并行下载,加快下载速度。以下是对这个主题的详细解释: 1. **Java多线程基础**: 在...

    java多线程下载源代码

    Java多线程下载是利用Java编程语言实现的一种高效下载大文件的技术。在传统的单线程下载方式中,如果网络环境不稳定或文件较大,下载过程可能会很慢,甚至中断。而多线程下载则是将文件分割成多个部分,每个部分由一...

    java多线程读取文件

    Java多线程读大文件 java多线程写文件:多线程往队列中写入数据

    Java多线程文件分片下载实现的示例代码

    多线程下载的技术难点 --------------------- 多线程下载中有两个主要的技术难点: 1. 如何请求才能拿到数据的特定部分,而非全部? 2. 分片后某线程下载时如何写出? 解决方案: 1. 在HTTP请求头中加入Range来...

    Java多线程文件下载

    1. **文件分块**:为了实现多线程下载,首先需要将大文件按固定大小(如1MB)分成多个部分,每个部分对应一个线程。这可以通过计算文件总大小和期望的线程数量来完成。 2. **下载线程管理**:创建一个`...

    java多线程文件传输

    在Java中,多线程可以提高程序的执行效率,尤其在处理并发任务时,如大文件的上传、下载和传输。下面将详细探讨相关知识点。 1. **线程基础** - **线程定义**:线程是操作系统分配CPU时间的基本单位,是程序执行的...

    java实现多线程下载文件

    在Java编程中,多线程下载文件是一种优化大文件下载速度和效率的技术。它通过将一个大文件分割成多个小部分,然后同时启动多个线程分别下载这些部分,从而达到加速下载的效果。以下是对这个主题的详细解释: 1. **...

    SpringBoot版本的多线程下载文件,分段下载文件

    本篇将深入探讨如何利用SpringBoot实现多线程下载文件以及分段下载文件的技术。 首先,多线程下载文件是一种提高下载速度的方法,通过将大文件分成多个小部分,每个部分由一个单独的线程负责下载,从而充分利用多核...

    Java 利用多线程实现文件的分片下载

    刚学完多线程和线程池,以及线程爱好者。 使用场景及目标: 大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而...

    java多线程URL方式下载单个大文件

    在Java编程中,多线程下载大文件是一种常见的优化策略,尤其对于网络资源如文件或图片的下载。这种策略能够利用多核处理器的优势,通过并发处理来提高下载速度。本篇将详细介绍如何使用Java实现基于URL的单个大文件...

    java写的多线程下载程序源码

    Java编写的多线程下载程序源码是一种利用Java语言特性实现高效大文件下载的技术。在这一程序中,主要涉及到了Java的多线程处理和网络编程两大核心知识点。 首先,让我们深入理解Java的多线程。Java提供了丰富的多...

    java多线程下载文件

    本文将深入解析Java多线程下载文件的关键技术和实现细节。 #### 一、Java多线程下载原理 多线程下载的核心思想是将一个大文件分割成多个小的部分,每个部分由一个独立的线程进行下载,最后将这些部分合并成完整的...

    Java多线程下载器

    Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个部分并同时下载,显著提高了下载速度。在Java中实现多线程下载器涉及许多关键概念和技术,包括线程、并发控制、网络I/O...

    java多线程下载器

    Java多线程下载器是一种利用Java编程语言实现的高效文件下载工具,它通过将大文件分割成多个小部分,然后创建多个线程同时下载这些部分,以提高下载速度。这种技术在处理大文件或者网络带宽有限的情况下尤其有用,...

    (Java)FTP多线程下载源代码

    实现了FTP多线程下载,并有简单的包括进度条的界面,代码的运行:1 把自己的PC配置成FTP服务器(只需下载Serc-U软件)2 建立用户,用户名:zhangyu,密码:123,设置根目录,并拷贝进一些文件(这就是FTP服务器上的要...

    Java实现的多线程下载工具

    Java实现的多线程下载工具是一种利用Java编程语言来提高文件下载效率的技术。在传统的单线程下载方式中,文件的下载过程由一个线程执行,可能会受到网络波动、服务器响应速度等因素的影响,导致下载速度慢且不稳定。...

    java实现多线程文件传输

    在Java编程语言中,实现多线程文件传输是一种优化程序性能、提高系统资源利用率的有效方法。多线程允许我们同时处理多个任务,这对于大文件传输或需要并行处理的场景尤其有用。本篇文章将深入探讨如何使用Java实现多...

Global site tag (gtag.js) - Google Analytics