第一部分 - 多线程复制文件
这个版本是因为看错了要求,把任务要求看成了“多线程复制一个文件”,写完才发现不对,但是代码还是没问题的,把它放上来。
线程类
package com.xxm.advanced_camp.greatmission3_readbigfiles;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* 用于多线程复制文件的线程类
* 用途:复制文件到另一个位置,
* <p>
* fileIn 输入文件
* <p>
* fileOut 输出文件
* <p>
* posStart 该线程复制的起始位置
* <p>
* posEnd 该线程复制的终点位置
*/
class CopyThread extends Thread {
File fileIn = null;
File fileOut = null;
long posStart = 0;
long posEnd = 0;
//定义带参数的构造方法
public CopyThread(File fileIn, File fileOut, long posStart, long posEnd) {
this.fileIn = fileIn;
this.fileOut = fileOut;
this.posStart = posStart;
this.posEnd = posEnd;
}
//覆写 run 方法
@Override
public void run() {
//1.初始化读写的 RandomAccessFile 对象
RandomAccessFile rafWrite = null;
RandomAccessFile rafRead = null;
//2.给对象复制,传入读取、写入的位置
try {
rafRead = new RandomAccessFile(fileIn, "r");
rafWrite = new RandomAccessFile(fileOut, "rw");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//3.定义用来存储读写数据的字节数组
byte[] b = new byte[1024 * 3];
//临时变量 len
int len = 0;
//4.利用 RandomAccessFile 类的 seek 方法获取线程复制文件的起始点
try {
rafWrite.seek(posStart);
rafRead.seek(posStart);
//5.死循环,len 不等于-1 时,代表文件未到达末尾,继续执行;等于-1时退出。
while ((len = rafRead.read(b)