迅雷在下载东西的时候把一个文件分割成好几部分,用几个线程一起下载,以此来提高下载的速度。
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();
}
}
}
分享到:
相关推荐
本篇将深入探讨如何利用SpringBoot实现多线程下载文件以及分段下载文件的技术。 首先,多线程下载文件是一种提高下载速度的方法,通过将大文件分成多个小部分,每个部分由一个单独的线程负责下载,从而充分利用多核...
在Java编程中,分段文件下载和多线程下载是提高大文件下载效率的重要技术。以下将详细解释这两种技术的实现及其在项目中的应用。 **分段文件下载**: 分段文件下载是一种将大文件分割成多个小部分,然后分别下载的...
`DownloadTask.java` 文件可能包含主逻辑,它会初始化下载任务,包括文件总大小、分段大小以及线程数量等参数。这个类还可能负责创建并管理`DownloadThread`实例,协调各个线程的进度,以及合并下载完成的段。 `...
【标题】"VODUploadDemo-java-1.4.14_Java" 是一个基于Java的视频上传示例项目,版本号为1.4.14。该项目专注于视频点播(VOD)服务,可能是一个SDK或者工具包,用于帮助开发者便捷地将视频内容上传到特定的VOD平台。...
在Java web应用中,通过HttpServletResponse返回流进行文件下载是一个常见的需求。通过设置响应头、读取文件流并写入到输出流中,我们可以让客户端浏览器弹出保存对话框,让用户选择保存文件的位置。同时,我们还...
【描述】:虽然描述中没有提供具体信息,但我们可以推断这篇博客可能介绍了如何在Java环境中实现分段上传文件的Web服务。博主 Tian Qiushi 在其ITEYE博客中可能分享了关于此主题的实践经验和代码示例。 【标签】:...
总的来说,MinIO的分段下载和预览功能通过Java SDK可以方便地集成到Spring Boot应用中,为用户提供高效且流畅的文件操作体验。在实现这些功能时,需要注意性能优化、错误处理以及用户体验的设计。
代码作用:多线程分段下载,加快下载速度,加入适当代码可支持断点下载 ================================================= ·示例代码位置: [项目目录]/src-app/app/DownloaderApp.java 代码里写了注释,有一定...
大文件的快速下载,经测试在100M带宽的网络下,下载一个40M的文件,不超过两秒钟,当然还得根据自己电脑的配置来讲。 其他说明: 文件如果特别小,而自己网络又非常好的情况下,不建议使用线程池进行下载,因为...
本文将深入探讨如何使用Java语言实现文件的本地上传、OSS(Object Storage Service)普通上传以及OSS大文件的分段上传。我们将重点讲解每个过程,并提供相关的知识点。 首先,我们来看本地文件上传。在Java中,我们...
下载完成后,工具需要将所有下载的分段文件合并为原始文件。这通常涉及到读取每个分段文件,按照原始文件的顺序将数据写入新的文件中。在Java中,这可以通过FileInputStream和FileOutputStream等I/O流类来实现。 5...
这个"多线程分别下载文件"的Demo是针对在ListView或GridView控件中实现的一项功能,允许用户选择多个文件进行并行下载,并且每个文件的下载进度可以在对应的列表项中实时更新,提供良好的用户体验。 首先,我们要...
在Java环境下,这样的工具通常会利用多线程技术来提高下载速度,通过分段下载和合并来优化整体性能。 描述中的“internet download manager in java”进一步确认了这是一个用Java编写的下载管理应用程序。这类程序...
在Java编程中,有时我们需要处理大文件的上传或下载,这时分段读取文件并通过HTTP上传就显得尤为重要。这种方法可以有效地管理内存,避免一次性加载整个大文件导致的内存溢出问题。以下是一个详细的步骤分析和实现...
在标题"android大文件分段上传"中提到的方法,是通过使用Socket流将大文件分段进行上传,这是一种有效应对大文件传输问题的策略。下面我们将详细探讨这一技术。 首先,了解Socket的基本概念。Socket是网络编程中的...
在IT领域,安全是至关重要的...在`RsaEncrypt.java`文件中,应该包含了具体的实现细节,如密钥的生成、加密解密的逻辑以及可能的分段处理等。通过理解并实践这些代码,开发者可以更好地掌握RSA加密在实际项目中的应用。
本文将深入探讨“HTTPS协议下的文件下载”这一主题,并通过分析提供的FileDownload.java源码,解析其实现原理。 首先,了解HTTPS的基础知识是必要的。HTTPS(HyperText Transfer Protocol Secure)是一种基于SSL/...
matlab中分段函数代码ECE 552项目:动态分支预测比较 贡献者:Stephen Hughes,Yitaek Hwang 抽象的 分支预测对于任何流水线处理器的整体性能至关重要。...src:用于仿真的Java,C和MATLAB代码 FinalProjectReport.pdf
4. **mp4parser**:这是一个强大的Java库,专门用于处理MP4格式的多媒体文件。在视频分段删除后,需要使用`mp4parser`将剩余的视频片段合并成一个完整的MP4文件。该库提供了丰富的API,允许开发者轻松地操作MP4文件...
在Java编程中,处理大文件是一项常见的挑战,特别是在内存有限的情况下。本教程将重点讲解如何使用`RandomAccessFile`类进行大文件的分段读写,并通过多线程技术提高效率,实现大文件的高效处理。 首先,让我们了解...