java实现多线程下载技术

Java 多线程下载技术实现 多线程下载多线程下载技术,简单的说就是把要下载的文件分成几块,由不同的线程来负责每一块数据的下载任务。技术要点 RandomAccessFile: Java中用来实现随机访问文件的类 http Range请求头 具体思路1、文件分块。 文件分块大小(blockSize)= (文件大小 +线程数 - 1 )/ 线程数 ; 2、确定每一个线程所要下载的 文件的起始和结束位置。 现假设为每个线程分 阅读详情

        多线程下载技术,简单的说就是把要下载的文件分成几块,由不同的线程来负责每一块数据的下载任务。

        要使用一个随机访问文件的类:RandomAccessFile类,具体用法请参考:http://blog.youkuaiyun.com/java4found/article/details/8656695

        具体思路:

             1、文件分块。 文件分块大小block = 文件大小 % 线程数 == 0 ? 文件大小 / 线程数 : 文件大小 / 线程数 + 1 ; 

             2、确定每一个线程下载对应用文件的位置指针。

                     现假设为每个线程分别编号threadid     0 1 2 3 4

                     则第一个线程负责的下载位置是: 0*分块大小  到  (0+1)*分块大小-1

                     第二个线程负责的下载位置是: 1*分块大小   到  (1+1)*分块大小-1

                           即有开始下载位置 start = threadid*block;

                           即有结束下载位置 end = (threadid+1)*block-1;

             3、最后通过设置连接的属性, conn.setRequestProperty("Range", "bytes=" + start + "-" + end);

简易的多线程下载代码如下:

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


public class MultiThread {
	public static void main(String[] args) {
		//文件下载路径
		String filePath = "http://dldir1.qq.com/qqfile/qq/QQ2013/QQ2013Beta2.exe";
		//文件保存路径
		String destination = "D:";
		//打算开启的线程数
		int threadNum = 5;
		new MultiThread().download(filePath, destination, threadNum);
	}

	/**
	 * 下载文件
	 */
	private void download(String filePath, String destination, int threadNum) {
		try {
			//通过下载路径获取连接
			URL url = new URL(filePath);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			//设置连接的相关属性
			conn.setRequestMethod("GET");
			conn.setReadTimeout(5000);
			//判断连接是否正确。
			if (conn.getResponseCode() == 200) {
				// 获取文件大小。
				int fileSize = conn.getContentLength();
				//得到文件名
				String fileName = getFileName(filePath);
				//根据文件大小及文件名,创建一个同样大小,同样文件名的文件
				File file = new File(destination + File.separator + fileName);
				RandomAccessFile raf = new RandomAccessFile(file, "rw");
				raf.setLength(fileSize);
				raf.close();
				// 将文件分成threadNum = 5份。
				int block = fileSize % threadNum == 0 ? fileSize / threadNum
						: fileSize / threadNum + 1;
				for (int threadId = 0; threadId < threadNum; threadId++) {
					//传入线程编号,并开始下载。
					new DownloadThread(threadId,block, file, url).start();
				}

			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	//由路径获取文件名。
	private String getFileName(String filePath) {
		return filePath.substring(filePath.lastIndexOf('/') + 1);
	}

}

//文件下载线程
class DownloadThread extends Thread {
	int start, end,threadId;
	File file = null;
	URL url = null;

	public DownloadThread(int threadId,int block, File file, URL url) {
		this.threadId = threadId;
		start = block * threadId;
		end = block * (threadId + 1) - 1;
		this.file = file;
		this.url = url;
	}

	public void run() {
		try {
			//获取连接并设置相关属性。
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");
			conn.setReadTimeout(5000);
			//此步骤是关键。
			conn.setRequestProperty("Range", "bytes=" + start + "-" + end);
			if (conn.getResponseCode() == 206) {
				RandomAccessFile raf = new RandomAccessFile(file, "rw");
				//移动指针至该线程负责写入数据的位置。
				raf.seek(start);
				//读取数据并写入
				InputStream inStream = conn.getInputStream();
				byte[] b = new byte[1024];
				int len = 0;
				while ((len = inStream.read(b)) != -1) {
					raf.write(b, 0, len);
				}
				System.out.println("线程"+threadId+"下载完毕");
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}



Java实现多线程分片文件下载 分片下载 所谓分片下载就是要利用多线程的优势,将要下载的文件一块一块的分配到各个线程中去下载,这样就极大的提高了下载速度。 技术难点 并不能说是什么难点,只能说没接触过不知道罢了。 1、如何请求才能拿到数据的特定部分,而非全部? 可以在HTTP请求头中加入Range来标识数据的请求范围/区间,从HTTP/1.1开始可用。 基本用法: Range: bytes=10-:取第10个字节及后所有数据。 ... 阅读详情

相关推荐

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

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

weixin_35433448的博客 652

Java实现简单的多线程URL下载器

程序主要类中的数据成员主要是主窗口的各个组件,而主要进行的操作就是所有组件的初始化以及添加到主窗口并显示窗口,最重要的是为了所有按钮添加事件监听程序,不同的按钮对应不同的操作,“新建下载”是输入所有参数和初始化下载线程(可能读取配置文件),“继续下载”是打开一个存在的配置文件并且用其中的信息进行下载线程的初始化,“开始”是启动所有下载线程和统计线程,“暂停”是保存当前下载进度到配置文件并且结束所有下载线程。如果判断到读取出的字节数为-1,说明该下载线程已经下载完成了需要下载的数据,那么关闭输入输出流。

moonwalker的博客 2934

ILI9488 TFT屏驱动与触摸协同开发指南

TFT-LCD显示模块是嵌入式人机交互系统的核心外设,其工作原理依赖于专用显示控制器(如ILI9488)对GRAM显存的精确读写,并通过SPI等串行总线接收指令与图像数据。理解RGB接口时序、寄存器初始化流程及DC/CS信号控制逻辑,是实现稳定显示的基础技术前提;而四线电阻式触摸功能则需配合XPT2046类ADC控制器,通过独立SPI或模拟时序完成坐标采集。该方案兼顾低功耗、高集成与工程可移植性,广泛应用于工业HMI、仪器仪表及STM32F407等MCU平台的教学与产品开发。本文围绕3.5英寸320×480

weixin_33814090的博客 149

Java多线程下载文件

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

laizhenghua的博客 2879

西门子smart能搜到cpu但连接当前IP地址失败

将ip地址改到同一网段 本机为192.168.1.119就是192.168.1.1网段,但plc在192.168.0.1网段,所以显示ip连接失败,改为同一网段192.168.1.xxx即可(为避免ip冲突尽量改到200往后最大255)如果显示这一步,那么你的物理连接是没有问题的,应当是plc和电脑并不在同一网段导致的问题。输入ipconfig 查看本机网段与plc是否为同一网段。此电脑就不在同一网段所有造成通讯失败,接下来解决这个问题。win+r打开运行,打开cmd。再次尝试,如果还是报错,那么。

weixin_62678581的博客 9866

贝塞尔曲线原理--曲线生成--路径规划--matlab代码

贝塞尔曲线有着很多特殊的性质, 在图形设计和路径规划中应用都非常广泛, 在路径规划中贝塞尔曲线完全由其控制点决定其形状, n个控制点对应着n-1阶的贝塞尔曲线,并且可以通过递归的方式来绘制.

bob595078694的博客 1万+

java利用多线程批量下载文档--附测试用例

!解决导出nginx超时问题 1、使用CountDownLatch+Runnable去优化批量下载问题,优化springboot批量下载word打包zip并通过浏览器下载的操作 2、提供实际项目模板案例、修改对应参数即可。

m0_51706962的博客 2646

高速PCB差分对布线仿真实战案例

差分对布线是高速PCB设计的关键环节,直接影响信号完整性与EMI性能。本文结合实际项目,详解等长控制、阻抗匹配、间距优化等核心技巧,并通过仿真工具验证眼图、串扰和时序裕量,助力工程师规避常见高速pcb设计陷阱。

weixin_29092787的博客 349

[Java多线程实现批量下载文件,层层优化多种方案实现?]

望岳 (唐) 杜甫 岱宗夫如何,齐鲁青未了。造化钟神秀,阴阳割昏晓。 荡胸生层云,决雌入归鸟。会当凌绝顶,一览众山小。

汤圆的博客 4853

手把手教你用Ubuntu 22.04的附加驱动工具安装NVIDIA显卡驱动(含常见错误修复)

本文详细介绍了在Ubuntu 22.04系统上,如何通过图形化的“附加驱动”工具安全、便捷地安装NVIDIA显卡驱动。内容涵盖从准备工作、禁用默认的nouveau驱动、图形界面安装实操,到安装后的验证(如使用nvidia-smi命令),并提供了安装失败黑屏、亮度调节失效等常见问题的深度解决方案,帮助用户彻底搞定驱动安装难题。

weixin_29248653的博客 602

Windows+VSCode+Cline+MCP全流程配置指南

本文提供了一份详细的Windows+VSCode+Cline+MCP全流程配置指南,旨在帮助开发者打造高效的AI辅助编码工作站。文章从环境准备讲起,逐步指导安装VSCode、配置Cline插件、搭建Node.js环境,并重点详解如何通过MCP为Cline集成文件系统和GitHub等工具服务器,实现用自然语言操控开发环境,从而显著提升日常编码与文件管理效率。

weixin_28840143的博客 553

Java 多线程下载文件

package cn.com.skyvis.Mystudy; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; import java.util.concurrent.CountDownLatch; public class MutiThreadDownLoad { /** * 同时下载的线程数

qq_41972358的博客 1153

ESP32-C3模组上跑通HTTPS分次传输文件(1)

ESP32-C3模组上跑通HTTPS分次传输文件(1)

phmatthaus的专栏 760

Java多线程下载技术实现

多线程下载 多线程下载技术,简单的说就是把要下载的文件分成几块,由不同的线程来负责每一块数据的下载任务。 技术要点 RandomAccessFile: Java中用来实现随机访问文件的类 http Range请求头 具体思路 1、文件分块。 文件分块大小(blockSize)= (文件大小 +线程数 - 1 )/ 线程数 ; 2、确定每一个线程所要下载的 文件的起始和结束位置。 现假设为每个线程分...

zhaoyang10的专栏 4305

【ComfyUI专栏】ComfyUI 常用工作流下载与分享网址

首先我们来分享第一个网站,Openart 网站,这个网站同时也能提供比较多的其他类型。但是如果希望下载工作流,我们可以访问到如下的这个站点。作为ComfyUI的学习用户来说,我们通常需要借助他山之石来帮助我们快速成长,因此我们需要找到能够分享和下载的网址。,当前网站是综合性网站,在网站中可以下载各种不同的类型,其中工作流只是可以下载的非常小的部分。这个网站也可以浏览不同的工作流,这个工作流的地址和访问如下的站点。

技术与管理的平衡木- 7799

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

使用Java实现多线程下载技术

首先需要两个类 下载类: package com.gyx; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.*; public class Download extends Thread{ Integer startIndex; Integer endIndex; Integ

qq_44098792的博客 151

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

基于java服务端及android客户端的仿讯雷多线程下载技术实现_Java / Android H基于ttp多线程下载的实现...

有个朋友须要个多线程如今的样例,就帮忙实现了。在此分享下~先说下原理,原理明确了,事实上非常easy:a、对于网络上的一个资源,首先发送一个请求,从返回的Content-Length中回去须要下载文件的大小。然后依据文件大小创建一个文件。this.fileSize = conn.getContentLength();// 依据响应获取文件大小File dir = new File(dirStr);...

weixin_32964881的博客 114

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

基于java服务端及android客户端的仿讯雷多线程下载技术实现_Java / Android 基于Http的多线程下载的实现...

有个朋友需要个多线程现在的例子,就帮忙实现了,在此分享下~先说下原理,原理明白了,其实很简单:a、对于网络上的一个资源,首先发送一个请求,从返回的Content-Length中回去需要下载文件的大小,然后根据文件大小创建一个文件。this.fileSize = conn.getContentLength();// 根据响应获取文件大小File dir = new File(dirStr);this...

weixin_34622572的博客 126

material-components-web 编码最佳实践:MDC Web 命名、隔离、性能与 TypeScript 开发规范深度解析

本篇技术指南以 MDC Web(material-components-web)官方开发规范文档 [docs/code/best_practices.md](https://link.gitcode.com/i/19eee89a2c8406dad07c50022dd86531) 为主体骨架,结合仓库内真实源码逐一印证:从 BEM 命名、文档写作、组件隔离到 GPU 动画性能,再到 TypeScri

gitblog_02297的博客 436

基于java服务端及android客户端的仿讯雷多线程下载技术实现_java多线程实现服务器端与多客户端之间的通信...

用java语言构建一个网络服务器,实现客户端和服务器之间通信,实现客户端拥有独立线程,互不干扰。应用多线程来实现服务器与多线程之间的通信的基本步骤服务器端创建ServerSocket,循环调用accept()等待客户端链接客户端创建一个Socket并请求和服务器端链接服务器端接受客户端请求,创建socekt与该客户端建立专线链接建立链接的socket在一个单独的线程上对话服务器继续等待新的链接服务...

weixin_42636895的博客 130

Java多线程下载工具,多线程,多任务,断点续传,GUI

多任务下载:封装任务类,每个任务类中记录着下载地址(URL)、保存地址、下载线程数组、监控线程、下载的对话框、是否时断点续传、线程数量、每个线程已经下载的字节数(当断点续传时)、文件长度、是否正在下载等信息,每次新建下载任务都会初始化一个任务对象,然后这个对象运行下载线程和监控线程。下载任务监控线程:每个下载任务中都包括一个监控和线程,监控和线程每隔一秒会检查每个下载线程的下载情况,并实时计算出下载的完成百分比、已下载的大小、下载速度、已下载时间、预计下载剩余时间等信息,并实时显示在对话框上。

一+一加1的博客 1432

Java / Android 基于Http的多线程下载的实现

有个朋友需要个多线程现在的例子,就帮忙实现了,在此分享下~ 先说下原理,原理明白了,其实很简单: a、对于网络上的一个资源,首先发送一个请求,从返回的Content-Length中回去需要下载文件的大小,然后根据文件大小创建一个文件。 this.fileSize = conn.getContentLength();// 根据响应获取文件大小 File dir = new File(dirSt

Hongyang 2万+

JAVA多线程下载器

大二末了,选好了方向,而去也喜欢网络并发,多线程之类的,就决定做个多线程下载器,学习学习文件,网络,线程间通讯的方法。 代码其实早就开始写,只是一直比较忙,也没写多少。今天认真花了一天把下载线程写了。 这个主要问题是下载文件的配置信息的写入,刚开始没有计算好seek()的参数,两个数之间总是差一截空白,找一两个点,发现seek是字节,而且JAVA写入的字母数字都是2字节一个的。下面是下载线程的

iloveflyatsky的博客 866

利用多线程技术,实现一个下载的进度条,每秒下载10%。

目录代码问题 代码 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class Test9_4 extends JFrame { protected JProgressBar dl=new JPr...

为什么他的emp没后座 932

java 多线程下载器_Java多线程的下载器(1)

实现了一个基于Java多线程的下载器,可提供的功能有:1. 对文件使用多线程下载,并显示每时刻的下载速度。2. 对多个下载进行管理,包括线程调度,内存管理等。一:单个文件下载的管理1. 单文件下载类层次首先简要介绍一下单个文件下载管理的类层次:来一张图来表示。为需要下载的文件创建一个Download类,Download负责管理该文件下载时的线程管理、文件管理、当前速度计算等操作。根据线程的数目tN...

weixin_39806388的博客 267
上一篇: java线程的基本应用
下一篇: xml文件的sax解析
Sweeter
博客等级 码龄14年 81粉丝 41原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值