网络编程--JAVA之多线程下载

本文介绍了Java中实现多线程下载的原理和步骤,包括理解带宽分配、资源大小获取、内存预分配以及线程下载段的确定。通过HttpURLConnection和IO流进行文件下载操作,后续将结合断点续存进行深入探讨。

今天,我来针对java中的一些网络编程中的多线程下载来进行简单的解析。

首先理解一下多线程下载的原理
这里写图片描述
- 如上图所示,有三个人A、B、C去下载MP4,当假设服务器的带宽网速是12M/s,那么三个人每人一个线程就平均每条线程可以分到4M/s

  • 但是如果A将占据两条线程,那么现在总共就有4条线程了,
    如图:
    这里写图片描述
    也就是说12M/s的网速平均每个线程是可以分到3M/s,那么A就分到了6M/s,B分到了3M/s,C也是分到了3M/s,那明显A下载MP4的速度要加快许多,这就是表现出来的多线程的下载一个简单的原理优势。

接着,我们来梳理一下实现多线程下载的步骤:

  1. 多线程下载其实就是将资源按线程多少来分段的去下载,那么要分段,首先就得知道所需下载资源的大小,所以先拿到资源大小。

  2. 先在内存中创建一个与所下资源,在这里也就是MP4大小的文件,先占好一个足够容下MP4大小的容量。
    原因:是因为如果不先占好位置的话,那么假如MP4的大小是200M,那么假设现在内存是205M,按理来说是内存是够的,那当我们开始下载MP4的中途中,我又下了一个15M的音乐,那么接下来的内存就不够MP4了,这就是为什么刚开始就要占好位置。)

  3. 接下来就要确定每条线程的开始位置和结束位置了。
    先来看个图:(ps:图画的丑,画板不是很会用,莫怪~~~)
    这里写图片描述
    在这里我们先假设MP4的大小为10M,现在我开三个线程去分段的下载这个资源,本来应该均分的,但是这里10除以3是除不尽的,那么也如图这样分配,最后一个分配四个。所以在这我们要确定每个线程在文件中开始位置和结束的位置。

  4. 接下来就真的是用HttpURLconnection以及IO流的知识来进行文件的下载,在这也就是文件的写入。(如不懂IO流,可以参照我转载的上篇博客,IO流详解)


Main代码中:

package com.ecjtu.mutilThread;

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

public class Main {


    /*
     * 先拿到需要下载文件的大小,先不用拿到流
     */
    public static final String PATH = "http://192.168.150.1:8088/txvpn_1.08.apk";

    public static int threadCount=3;///进行下载的数量

    public 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值