使用RandomAccessFile和多线程来实现开启三个线程去复制一个文件
来源:互联网 发布:一淘好用还是淘宝联盟 编辑:程序博客网 时间:2024/06/05 02:05
题目:使用RandomAccessFile和多线程来实现开启三个线程去复制一个文件
代码:
package Down;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class DownLoadDemo {
public static void main(String[] args) {
File src = new File(“E:\qqq.txt”);
File dst = new File(“E:\ppp.txt”);
DownloadUtil downloadUtil = new DownloadUtil(src, dst, 3);
downloadUtil.download();
}
}
// 下载工具类
class DownloadUtil {
private File src;// 源文件
private File dst;// 目标文件
private int threadNum;// 线程数量
public DownloadUtil(File src, File dst, int threadNum) { super(); this.src = src; this.dst = dst; this.threadNum = threadNum;}// 开启多线程下载public void download() { // 循环开多个线程 for (int i = 0; i < threadNum; i++) { DownloadThread thread = new DownloadThread(i); thread.setName("线程" + (i + 1)); thread.start(); }}// 定义一个下载线程class DownloadThread extends Thread { // private int index;/表示第几个线程 // 每一个线程要下载的文件大小 // 如果不能平方,则每一份+1,确保下载完整个文件 private long BlockSize = src.length() % threadNum == 0 ? src.length() / threadNum : src.length() / threadNum + 1; // 起始位置 private long startPos; public DownloadThread(int index) { // this。index = index; // 计算初始位置 startPos = BlockSize * index; } public void run() { super.run(); try { // 要读入的文件 RandomAccessFile rafR = new RandomAccessFile(src, "r"); // 要写入的文件 RandomAccessFile rafW = new RandomAccessFile(dst, "rw"); rafR.seek(startPos); rafW.seek(startPos); int bufSize = 1024 * 1024;// 缓冲区大小 byte[] buf = new byte[bufSize];// 缓冲区 int len = -1; do { len = (int) (BlockSize > bufSize ? bufSize : BlockSize); rafR.read(buf, 0, len); rafW.write(buf, 0, len); BlockSize -= len; System.out.println(Thread.currentThread().getName() + "读取了" + len + "字节"); } while (BlockSize > 0); rafR.close(); rafW.close(); System.out.println(Thread.currentThread().getName() + "下载完毕"); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
}
阅读全文
0 0
- 使用RandomAccessFile和多线程来实现开启三个线程去复制一个文件
- RandomAccessFile实现多线程文件复制
- 使用多线程去复制一个文件,我们可以指定文件名和线程数
- 使用xUtils3和RandomAccessFile来实现文件的分片上传
- RandomAccessFile 多线程的文件复制
- java多线程复制文件,RandomAccessFile类
- 使用RandomAccessFile实现多线程下载
- 使用多线程实现文件复制
- 迅雷面试题 多线程编程,开启三个线程每个线程输出一个字符
- 多线程去复制一个文件夹
- 使用RandomAccessFile进行文件的复制
- RandomAccessFile多线程下载、复制文件、超大文件读写
- 多线程的使用技巧:使用匿名内部类来实现一个线程的创建
- Java多线程之~~~使用CountDownLatch来同步多个线程实现一个任务
- 多线程实现文件复制
- 用File和RandomAccessFile新建一个文件
- 多线程---使用ManualResetEvent来控制线程间的同步(实现了消费者和生产者模式)
- 使用FileChannel(文件通道)来实现文件快速复制
- 递归转DP
- 极值问题(dp)
- javascript 基础知识二
- JAVA开发的23种设计模式之 --- 享元模式
- 除了深度学习,机器翻译还需要啥?
- 使用RandomAccessFile和多线程来实现开启三个线程去复制一个文件
- 算法分析学习日志(二):最大子序列和问题
- 牛腩新闻发布系统——初探JQuery,AJAX
- 使用spring集成xfire开发webservice接口时的namespace和参数名称等配置
- (五)JDBC连接池&DBUtils—DBUtils完成CRUD
- Solr__luence(二)检索索引,分页搜索
- CentOS安装g++
- Appium Java 清空 EditText 内容碰到的问题
- javaWeb文件上传-image示例