Java文件下载结合多线程

多线程下载+视频播放 依赖 俩个类 package com.example.xzai; import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.net.URL; import java.ne 阅读详情
package DownLoadUtils;


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


public class DownloadClass {

// 定义下载资源的路径
    private String path;
    // 指定所下载的文件的保存位置
    private String targetFile;
    // 定义需要使用多少线程下载资源
    private int threadNum;
    // 定义下载的线程对象
    private DownThread[] threads;
    // 定义下载的文件的总大小
    private int fileSize;
    
    public void DownFactory(String path, String targetFile, int threadNum)
    {
        this.path = path;
        this.threadNum = threadNum;
        // 初始化threads数组
        threads = new DownThread[threadNum];
        this.targetFile = targetFile;
    }


    public void StartDownload() throws Exception
    {
        URL url = new URL(path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //设置响应超时时间
        conn.setConnectTimeout(5 * 1000);
        //设置请求方法
        conn.setRequestMethod("GET");
        //设置
        conn.setRequestProperty(
                "Accept",
                "image/gif, image/jpeg, image/pjpeg, image/pjpeg, "
                        + "application/x-shockwave-flash, application/xaml+xml, "
                        + "application/vnd.ms-xpsdocument, application/x-ms-xbap, "
                        + "application/x-ms-application, application/vnd.ms-excel, "
                        + "application/vnd.ms-powerpoint, application/msword, */*");
        conn.setRequestProperty("Accept-Language", "zh-CN");
        //设置文字字符集
        conn.setRequestProperty("Charset", "UTF-8");
        //设置维持长连接
        conn.setRequestProperty("Connection", "Keep-Alive");
        // 得到文件大小
        fileSize = conn.getContentLength();
        conn.disconnect();
        int currentPartSize = fileSize / threadNum + 1;//这里不必一定要加1,不加1也可以
        
        RandomAccessFile file = new RandomAccessFile(targetFile, "rw");
        
        
        // 设置本地文件的大小
        file.setLength(fileSize);
        file.close();
        
        for (int i = 0; i < threadNum; i++)
        {
            // 计算每条线程的下载的开始位置
            int startPos = i * currentPartSize;
            // 每个线程使用一个RandomAccessFile进行下载
            RandomAccessFile currentPart = new RandomAccessFile(targetFile, "rw");
            // 定位该线程的下载位置
            currentPart.seek(startPos);
            // 创建下载线程
            threads[i] = new DownThread(startPos, currentPartSize, currentPart);
            // 启动下载线程
            threads[i].start();
        }
    }


    // 获取下载的完成百分比
    public double getCompleteRate()
    {
        // 统计多条线程已经下载的总大小
        int sumSize = 0;
        for (int i = 0; i < threadNum; i++)
        {
            sumSize += threads[i].length;
        }
        // 返回已经完成的百分比
        return sumSize * 1.0 / fileSize;
    }


    private class DownThread extends Thread
    {
        // 当前线程的下载位置
        private int startPos;
        // 定义当前线程负责下载的文件大小
        private int currentPartSize;
        // 当前线程需要下载的文件块
        private RandomAccessFile currentPart;
        // 定义已经该线程已下载的字节数
        public int length;


        public DownThread(int startPos, int currentPartSize,RandomAccessFile currentPart)
        {
            this.startPos = startPos;
            this.currentPartSize = currentPartSize;
            this.currentPart = currentPart;
        }


        @Override
        public void run()
        {
            try
            {
                URL url = new URL(path);
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                conn.setConnectTimeout(5 * 1000);
                conn.setRequestMethod("GET");
                conn.setRequestProperty("Accept-Language", "zh-CN");
                conn.setRequestProperty("Charset", "UTF-8");
                InputStream inStream = conn.getInputStream();
                
                // 跳过startPos个字节,表明该线程只下载自己负责哪部分文件。
                inStream.skip(this.startPos);
                byte[] buffer = new byte[1024];
                int hasRead = 0;
                // 读取网络数据,并写入本地文件
                while (length < currentPartSize
                        && (hasRead = inStream.read(buffer)) != -1)
                {
                    currentPart.write(buffer, 0, hasRead);
                    // 累计该线程下载的总大小
                    length += hasRead;
                }
                currentPart.close();
                inStream.close();
                System.out.println("====已完成====");
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
}
java使用 网络连接+RandomAccessFile + io 多线程实现多线程下载文件并显示实时网速 下载文件的时候,一个大文件切成很多片,用多线程下载,速度会快很多 阅读代码的时候注意查看代码里面的注释 想用多线程下载文件,则, 第一:得了解  RandomAccessFile  类,这是个随机访问文件类,里面可以设置 访问的 开始地址和结束地址,且该类可读可写。 RandomAccessFile out = new RandomAccessFile(file, "rw"); 则表示,该... 阅读详情

相关推荐

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

今天,我来针对java中的一些网络编程中的多线程下载来进行简单的解析。首先理解一下多线程下载的原理: - 如上图所示,有三个人A、B、C去下载MP4,当假设服务器的带宽网速是12M/s,那么三个人每人一个线程就平均每条线程可以分到4M/s 但是如果A将占据两条线程,那么现在总共就有4条线程了, 如图: 也就是说12M/s的网速平均每个线程是可以分到3M/s,那么A就分到了6M

等待起飞_鎏的博客 1693

JAVA线程实现下载_多线程实现多线程下载文件

下载文件的时候,一个大文件切成很多片,用多线程下载,速度会快很多阅读代码的时候注意查看代码里面的注释想用多线程下载文件,则,第一:得了解RandomAccessFile 类,这是个随机访问文件类,里面可以设置 访问的 开始地址和结束地址,且该类可读可写。RandomAccessFileout = new RandomAccessFile(file, "rw"); 则表示,该类可读可写。通过...

weixin_39710462的博客 770

TCP网络编程之多线程文件上传与下载

1. java的IO流 input输出:所有往内存中送数据的都是输入 output输出:所有的从内存中出数据都是输出 能用java.io包的api方法操作的输入输出 内存–>外存(硬盘,光盘,U盘) 本地流输出 内存<–外存 本地流输入 2. 结合Socket网络编程 ** 内存–>网络上 网络流输出 内存<–网络上 网络流输入** **...

zhany15188773139的博客 1011

多线程断点续传实践

/** * author:annegu * date:2009-07-16 */ annegu做了一个简单的Http多线程的下载程序,来讨论一下多线程并发下载以及断点续传的问题。 这个程序的功能,就是可以分多个线程从目标地址上下载数据,每个线程负责下载一部分,并可以支持断点续传和超时重连。 下载的方法是download(),它接收两个参数,分别是要下载的页面的...

annegu 626

Java多线程文件下载技术实现与应用

在多线程编程中,线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。线程可以被用来执行程序中的多个部分,使其并行执行。线程的生命周期包括以下五个状态:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Terminated)。在Java中,这些状态是通过Thread类中的一系列方法来管理的。当一个线程实例被创建时,它处于新建状态。

weixin_35433448的博客 652

Netty通讯框架-多线程-源代码

Netty 通讯框架 多线程 源代码 刚写的一个通讯框架,可以启动多个client,并设置client数量,可以用于测试Netty框架支持多少用户数量

学习JAVA第七课:多线程

多线程啊多线程,做游戏的好工具

林一百二十八的博客 1337

java分段文件下载的实现与多线程下载最新版

项目中用到分段文件下载,也使用多线程下载,提高下载效率。 自己花了时间整合成一个项目,可直接执行Junit方法看效果。

Java多线程下载文件

以下载多个文件为例,如何使用多线程机制,高效率的完成下载任务?

laizhenghua的博客 2879

NVIDIA 2025 Board Design Engineer 校招笔试全解析:从基础门电路到理想放大器设计

本文详细解析了NVIDIA 2025届板级设计工程师校招笔试的核心考点与解题策略。内容涵盖从基础门电路、CMOS实现NOR门,到开关电源CCM/DCM模式波形分析与效率计算,以及理想运放电路设计与稳定性优化。旨在帮助考生构建硬件知识体系,掌握工程思维,顺利通过NVIDIA Board Design Engineer校招笔试。

weixin_29172201的博客 195

白盒测试逻辑覆盖之谓词覆盖、子句覆盖、三类有效字句覆盖等知识点

本篇笔记会简化书本上的概念,用容易理解的方式来说明,有些例子打字麻烦,我会直接放图片! 目录 基础知识: 谓词覆盖predicate coverage 子句覆盖 clause coverage 组合覆盖 combinatorial coverage 有效字句覆盖Active Clause Coverage 广义有效子句覆盖(General Active Clause Coverage) 相关性有效子句覆盖(Correlated Active Clause Coverage) 限制性有效

weixin_46019681的博客 2664

Java高性能文件上传下载系统实战:异步任务与多线程结合代码解析

Java结合异步任务和多线程,可构建高性能文件上传下载系统。通过批量传输、异步执行和线程池优化,能够在高并发文件传输场景下实现低延迟、高吞吐量。实践这些方法,开发者可以构。

2501_94180176的博客 303

探索niri:让你的Linux桌面布局无拘无束

niri是一款基于Wayland的滚动平铺合成器,采用创新的窗口管理方式。它将窗口排列为向右无限延伸的条目,支持独立显示器布局和动态垂直工作区,确保多任务操作流畅性。核心功能包括概要视图、截图界面、屏幕投射、手势操作、窗口分组等,并支持自定义布局和动画效果。niri具备良好的稳定性,兼容xwayland-satellite工具,灵感来自PaperWM但突破了GNOME限制。该项目为追求高效桌面管理的用户提供了全新解决方案,欢迎加入社区交流体验。

weixin_44626085的博客 1816

在Java中使用多线程结合断点续传实现一个简单的文件下载器

这篇博客介绍在android中使用多线程和断点续传实现一个简单的文件下载器 第一步:启动Tomcat服务器,将需要下载的文件部署到Tomcat服务器上 第二步:使用eclipse创建一个Java工程,并且在工程中添加下面的代码 package com.fyt.multidownload; import java.io.BufferedReader; import java.io.F

meishadevs的个人博客 3448

京瓷扫描驱动安装_京瓷喷头拆解和供墨原理剖析

在工业喷头打印领域,京瓷喷头作为主流喷头广泛应用于喷墨行业,目前京瓷喷头市面上销售主要有两个系列:KJ4A和KJ4B。其中KJ4A系列设计是用于油性墨水,例如UV墨水,主要用在广告领域;而KJ4B设计用于水性墨水,例如活性、分散墨水等,主要用在数码印花领域。最近我们团队对京瓷喷头进行了拆解分析,本期和大家分享一下我们对京瓷喷头拆解和喷头供墨原理的研究。京瓷喷头介绍1. KJ4A系列(油性)如下图所...

weixin_39883906的博客 1672

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

解决2020R2,2022R1等版本的SCDM无法编辑草图尺寸的问题

y_u_yu_yu_的博客 1万+

java网络编程和io,多线程结合完成文件上传和下载案例

客户端: package cn.lmj201403; import java.io.FileInputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; public class FileUpload_client { public stat

u010548376的专栏 931

【Unity】YooAsset + HybridCLR热更

本文介绍了Unity游戏开发中的热更新技术方案,重点对比了资源热更和代码热更的主流工具。资源热更方面分析了Asset Bundle、Addressable和YooAsset的优缺点;代码热更部分比较了xLua、ILRuntime、InjectFix和HybridCLR的性能特点。文章详细演示了HybridCLR+YooAsset的实践方案,包括加载热更新程序集、反射调用热更代码、资源打包部署等完整流程。该方案通过原生运行时实现程序集级热更,具有极低性能损耗和全生命周期适用性,配合YooAsset简化了资源管

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 2916

JAVA 实现多线程下载大文件

JAVA 实现多线程下载大文件 开发中遇到一个问题,下载大文件到本地,导致等待时间过长,然后就寻找一个可以多线程下载的办法,受下载软件启发,想到多线程下载, 原理,首先查到这个文件的大小,然后根据线程数量去分配每个线程下载多大的片段,然后将每个线程的组合到一起,就是最终的下载文件。如图 然后就是代码时间, 必不可少的控制层 @Override @ApiOperation(value = "多线程获取大文件", httpMethod = "POST") @BodyValida

qq_43021813的博客 5181

cesium 淹没分析

cesium淹没分析

God's asylum的博客 480

借助AI搞定国社科“研究内容”部分!用Gemini 3 Pro轻松撰写6大模块,让基金本子效率质量更上一层楼

所谓研究整体框架,是对课题研究逻辑结构与技术路径的系统阐述,其核心在于通过研究目标分解、研究内容模块化与研究方法整合,构建一个层次清晰、逻辑严密、科学可行的研究体系。撰写要求:1)分要点、分层次列出主要研究内容,保持各部分之间的逻辑性、层次性与系统性;研究可行性可理解为开展本课题在理论基础、研究方法、研究条件、人员结构、平台支撑及外部协作等方面的可实施程度,可从内部条件与外部条件两个维度进行系统论证。研究背景为:我正在申报xxx年xxx(项目名称),课题名称为:xxx,拟采用的主要研究方法包括:xxx等;

智能AI让学术科研更容易 964

java 多线程下载网络图片、视频等

例如:实现多个文件同时下载,通过爬虫的方式,或者其他渠道获得到的图片、视频路径(多个),如果成千上百个图片、视频还好你可以等一会,但是上万个,就算一个文件一秒,你也不相等把,如果是视频呢,所以就总结了一下,使用多线程的方式,同时下载多个文件。既加快啦速度页,节省啦时间。例如:下载一个视频的时候,文件很大却又想下载快些就可以使用多线程进行下载。多线程的方式把一个视频查分成多个视频进行下载,加快啦视频的下载速度。

weixin_45248225的博客 1282

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

多线程项目实战——多线程下载器

多线程下载器 最近学习了多线程相关知识,通过一个小项目对所学知识梳理,做一个综合的运用。 项目介绍 该项目主要是使用HttpURLConection发起HTTP请求,再结合IO流和多线程对文件进行一个切分下载,最后合并。

铭鸽鸽的博客 893

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java实现多线程断点续传下载文件

package com.itheima.download; import java.io.BufferedReader; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.InputStream; import java.io.OutputStream;

Hacker的博客 1227

使用JAVA实现HTTP多线程下载

使用JAVA实现HTTP多线程下载          下载工具我想没有几个人不会用的吧,前段时间比较无聊,花了点时间用java写了个简单的http多线程下载程序,纯粹是无聊才写的,只实现了几个简单的功能,而且也没写界面,今天正好也是一个无聊日,就拿来写篇文章,班门弄斧一下,觉得好给个掌声,不好也不要喷,谢谢! 我实现的这个http下载工具功能很简单,就是一个多线程以及一个断点恢复,当然下

java_freshman01的专栏 714

Java之多线程断点下载的实现

RandomAccessFile类: 此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte 数组。存在指向该隐含数组,光标或索引,称为文件指针;输入操作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出操作也可用;输出操作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当

BIGBurning 1659
上一篇: 关于生成验证码
下一篇: 使用jquery的tmpl动态加载数据模板
Mind_Reader
博客等级 码龄12年 2粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值