Java代码实现多线程下载和断点续传

多线程下载原理

  • 客户端要下载一个文件, 首先请求服务器,服务器将这个文件传送给客户端,客户端保存到本地, 完成了一个下载的过程.
  • 多线程下载的思想是客户端开启多个线程同时下载,每个线程只负责下载文件的一部分, 当所有线程下载完成的时候,文件下载完毕.
    • 并不是线程越多下载越快, 与网络环境有很大的关系
    • 在同等的网络环境下,多线程下载速度要高于单线程.
    • 多线程下载占用资源比单线程多,相当于用资源换取速度

java代码实现多线程下载

代码的思路:

  1. 首先要获取要下载文件的大小
  2. 在磁盘上使用RandomAccessFile 这个类在磁盘上创建一个大小一样的文件,将来将数据写入这个文件.
  3. 为每个线程分配下载任务. 内容包括线程现在文件的开始位置和结束位置.这里面有一点数学知识,代码中有备注.
  4. 启动下载线程
  5. 判断有没有保存上次下载的临时文件.
  6. 在启动线程下载的时候保存下载的位置信息
  7. 下载完毕后删除当前线程产生的临时文件
package com.yb.muchthreaddown;

import java.io.File;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * 多线程下载 和 断点续传
 * @author 杨斌.
 *
 */
public class MuchThreadDown {
   

//  private String path = "http://mpge.5nd.com/2016/2016-11-15/74847/1.mp3";    //下载路径
    private String path = "http://117.169.69.238/mp3.9ku.com/m4a/186947.m4a";
    private String targetFilePath="/";  //下载文件存放目录
    private int threadCount = 3;    //线程数量

    /**
     * 构造方法 
     * @param path 要下载文件的网络路径
     * @param targetFilePath 保存下载文件的目录
     * @param threadCount 开启的线程数量,默认为 3
     */
    public MuchThreadDown(String path, String targetFilePath, int threadCount) {
        this.path = path;
        this.targetFilePath = targetFilePath;
        this.threadCount = threadCount;
    }

    /**
     * 下载文件
     */
    
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值