在我们学习IO流时,我们对文件进行传输,其实都是使用的串行传输方式,这种传输方式在传输小文件时性能还是我们可以接受的,但是在传输超大型文件时,这种串行的传输方式就会变得非常低效,因为只有一个线程去抢夺CPU的执行权,其占用的执行时间是非常少的,当我们采用多线程时,其相对的占用CPU执行时间的百分比会提高,也就是CPU会花费更多时间去进行文件传输;
如何进行并行传输:
在IO流中,有一个RandomAccessFile类,我们用它进行文件传输。这个类的优点是可以在任何位置开始读写操作,比如一个4G大小的文件,我们准备使用四个线程对它进行copy,那么thread1可以从0号字节开始,thread2可以从1G字节处开始,以此类推。这样,在多个线程运行时,都从各自的mark位置开始写,互不影响,这样就达到了并行传输的目的;
代码实现:
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
class ThreadDemo extends Thread{
private RandomAccessFile read=null;
private RandomAccessFile write=null;
private long start;
private long end;
private String srcPath;
private String DestPath;
ThreadDemo(long start,long end,String srcPath,String DestPath){
this.start=start;
this.end=end;
this.srcPath=srcPath;
this.DestPath=DestPath;
}
@Override
public void run() {
try {
this.read=new RandomAccessFile(srcPath,"r");
thi