`
lingyibin
  • 浏览: 196309 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

分段下载文件--java版

    博客分类:
  • Java
阅读更多

迅雷在下载东西的时候把一个文件分割成好几部分,用几个线程一起下载,以此来提高下载的速度。

Java也可以实现这个功能 。

用一般的文件、缓冲流等来读取时,有一个skip的方法可让文件读取的时候从几个不同的起点开始开始读,但这个方法大家都知道不可靠,不稳定,容易出现一些奇怪的位置错误。

不过Java提供了另一个类:RandomAccessFile,它可以跳到文件的任意地方开始读。

有几个朋友问过我文件多线程下载的问题,今天就写一个程序实现一下。。。

 

package cn.ling.test1;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;

public class TestRAF {

	private final static int parts = 5; //把文件分成5份
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		for(int i = 0; i < parts; i ++){
			ReadFile rf = new ReadFile(i,parts,"F:/Win7/eclipse361/ws/TestMark/src/cn/ling/test1/test.jpg");
			rf.start();			
		}
		System.out.println("复制成功!");
	}

}

class ReadFile extends Thread{
	private int start = 0;
	private int parts = 0;
	private String file = "";
	
	public ReadFile(int start,int parts, String file){
		this.start = start;
		this.file = file;
		this.parts = parts;
	}
	
	public void run(){
		System.out.println("第" + start + "个线程正在运行!");
		try {
			RandomAccessFile raf = new RandomAccessFile(file , "rw");
			long len =  raf.length();
			raf.seek(len*start/parts); //跳到第start部分开始读
			byte[] buf = new byte[(int)(len/parts)]; //读取len/parts个字节
			raf.read(buf);
			raf.close();

			int index = file.lastIndexOf(".");
			String newFileName = file.substring(0,index) + "_bak" + file.substring(index);
			raf = new RandomAccessFile(newFileName, "rw");
			raf.seek(len*start/parts);
			raf.write(buf);
			raf.flush();
			raf.close();
		} catch (FileNotFoundException e) {
			//e.printStackTrace();
		} catch (IOException e) {
			//e.printStackTrace();
		}
	}
}
 
2
0
分享到:
评论
1 楼 mapeijie888 2011-03-25  
good

相关推荐

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

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

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

    在Java编程中,分段文件下载和多线程下载是提高大文件下载效率的重要技术。以下将详细解释这两种技术的实现及其在项目中的应用。 **分段文件下载**: 分段文件下载是一种将大文件分割成多个小部分,然后分别下载的...

    httpclient多线程下载(分段下载)实践

    `DownloadTask.java` 文件可能包含主逻辑,它会初始化下载任务,包括文件总大小、分段大小以及线程数量等参数。这个类还可能负责创建并管理`DownloadThread`实例,协调各个线程的进度,以及合并下载完成的段。 `...

    VODUploadDemo-java-1.4.14_Java

    【标题】"VODUploadDemo-java-1.4.14_Java" 是一个基于Java的视频上传示例项目,版本号为1.4.14。该项目专注于视频点播(VOD)服务,可能是一个SDK或者工具包,用于帮助开发者便捷地将视频内容上传到特定的VOD平台。...

    java httpServletResponse返回流进行 下载 - 姐呵呵博客专栏 - CSDN博客1

    在Java web应用中,通过HttpServletResponse返回流进行文件下载是一个常见的需求。通过设置响应头、读取文件流并写入到输出流中,我们可以让客户端浏览器弹出保存对话框,让用户选择保存文件的位置。同时,我们还...

    webservice分段上传文件

    【描述】:虽然描述中没有提供具体信息,但我们可以推断这篇博客可能介绍了如何在Java环境中实现分段上传文件的Web服务。博主 Tian Qiushi 在其ITEYE博客中可能分享了关于此主题的实践经验和代码示例。 【标签】:...

    minio分段下载 实现下载 预览

    总的来说,MinIO的分段下载和预览功能通过Java SDK可以方便地集成到Spring Boot应用中,为用户提供高效且流畅的文件操作体验。在实现这些功能时,需要注意性能优化、错误处理以及用户体验的设计。

    HTTP分段下载/断点续传/多线程下载

    代码作用:多线程分段下载,加快下载速度,加入适当代码可支持断点下载 ================================================= ·示例代码位置: [项目目录]/src-app/app/DownloaderApp.java 代码里写了注释,有一定...

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

    大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而自己网络又非常好的情况下,不建议使用线程池进行下载,因为...

    文件上传(普通上传,oss上传,oss大文件分段上传)

    本文将深入探讨如何使用Java语言实现文件的本地上传、OSS(Object Storage Service)普通上传以及OSS大文件的分段上传。我们将重点讲解每个过程,并提供相关的知识点。 首先,我们来看本地文件上传。在Java中,我们...

    纯JavaFX实现的多线程分段下载工具源码

    下载完成后,工具需要将所有下载的分段文件合并为原始文件。这通常涉及到读取每个分段文件,按照原始文件的顺序将数据写入新的文件中。在Java中,这可以通过FileInputStream和FileOutputStream等I/O流类来实现。 5...

    多线程分别下载文件

    这个"多线程分别下载文件"的Demo是针对在ListView或GridView控件中实现的一项功能,允许用户选择多个文件进行并行下载,并且每个文件的下载进度可以在对应的列表项中实时更新,提供良好的用户体验。 首先,我们要...

    Internet-Download-Manager-Java.rar_java download

    在Java环境下,这样的工具通常会利用多线程技术来提高下载速度,通过分段下载和合并来优化整体性能。 描述中的“internet download manager in java”进一步确认了这是一个用Java编写的下载管理应用程序。这类程序...

    java实现分段读取文件并通过HTTP上传的方法

    在Java编程中,有时我们需要处理大文件的上传或下载,这时分段读取文件并通过HTTP上传就显得尤为重要。这种方法可以有效地管理内存,避免一次性加载整个大文件导致的内存溢出问题。以下是一个详细的步骤分析和实现...

    android大文件分段上传

    在标题"android大文件分段上传"中提到的方法,是通过使用Socket流将大文件分段进行上传,这是一种有效应对大文件传输问题的策略。下面我们将详细探讨这一技术。 首先,了解Socket的基本概念。Socket是网络编程中的...

    Java实现Rsa非对称分段加解密方法源码分享

    在IT领域,安全是至关重要的...在`RsaEncrypt.java`文件中,应该包含了具体的实现细节,如密钥的生成、加密解密的逻辑以及可能的分段处理等。通过理解并实践这些代码,开发者可以更好地掌握RSA加密在实际项目中的应用。

    https协议下的文件下载

    本文将深入探讨“HTTPS协议下的文件下载”这一主题,并通过分析提供的FileDownload.java源码,解析其实现原理。 首先,了解HTTPS的基础知识是必要的。HTTPS(HyperText Transfer Protocol Secure)是一种基于SSL/...

    matlab中分段函数代码-BranchPredictionComparison:ECE552项目

    matlab中分段函数代码ECE 552项目:动态分支预测比较 贡献者:Stephen Hughes,Yitaek Hwang 抽象的 分支预测对于任何流水线处理器的整体性能至关重要。...src:用于仿真的Java,C和MATLAB代码 FinalProjectReport.pdf

    android 视频分段录制,分段删除,最后合成一个mp4文件

    4. **mp4parser**:这是一个强大的Java库,专门用于处理MP4格式的多媒体文件。在视频分段删除后,需要使用`mp4parser`将剩余的视频片段合并成一个完整的MP4文件。该库提供了丰富的API,允许开发者轻松地操作MP4文件...

    使用RandomAccessFie分段写大文件,创建多线程程席、通讨多线程分段读取大文件并分段写入到新文件

    在Java编程中,处理大文件是一项常见的挑战,特别是在内存有限的情况下。本教程将重点讲解如何使用`RandomAccessFile`类进行大文件的分段读写,并通过多线程技术提高效率,实现大文件的高效处理。 首先,让我们了解...

Global site tag (gtag.js) - Google Analytics