java 有比用多线程更快的复制技术吗?
windows自带的复制共能的速度远比我用多线程复制要快,这是什么原因?importjava.io.*;publicclassstream12implementsRunn...
windows自带的复制共能的速度远比我用多线程复制要快,这是什么原因?
import java.io.*;
public class stream12 implements Runnable{
private static String sourceFile;//原文件
private static String targetFile;//目标文件
private static int blockCount;//分块数
private int blockNo;//分块序号
private int maxBufferSize=1024*1024;//缓存大小
public stream12(String sourceFile,String targetFile,int blockCount,int blockNo){
this.sourceFile=sourceFile;
this.targetFile=targetFile;
this.blockCount=blockCount;
this.blockNo=blockNo;
}
public void run(){
File file=new File(sourceFile);
long size=file.length();//原文件大小
long blockSize=size / blockCount;//文件块大小
byte [] dat=new byte[maxBufferSize];//缓存数组
long startPosition =blockSize*blockNo;//开始位置
try{
InputStream inputStream=new FileInputStream(sourceFile);
RandomAccessFile raf=new RandomAccessFile(targetFile,"rw");
int curRedLength;//当前读取字节数
int totalRedLength=0;//
raf.seek(startPosition);
inputStream.skip(startPosition);
while((curRedLength=inputStream.read(dat))>0 && totalRedLength<blockSize){
raf.write(dat, 0,curRedLength);
totalRedLength+=curRedLength;
}
inputStream.close();
raf.close();
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
sourceFile="h:\\dabaicai.exe";
targetFile="h:\\xiaobaicai.exe";
blockCount=5;
long a=System.currentTimeMillis();
for(int i=0;i<blockCount;i++){
stream12 copy=new stream12(sourceFile,targetFile,blockCount,i);
Thread thread =new Thread(copy);
thread.start();
try{
thread.join();
}catch(Exception e){
e.printStackTrace();
}
}
System.out.print(System.currentTimeMillis()-a);
}
} 展开
import java.io.*;
public class stream12 implements Runnable{
private static String sourceFile;//原文件
private static String targetFile;//目标文件
private static int blockCount;//分块数
private int blockNo;//分块序号
private int maxBufferSize=1024*1024;//缓存大小
public stream12(String sourceFile,String targetFile,int blockCount,int blockNo){
this.sourceFile=sourceFile;
this.targetFile=targetFile;
this.blockCount=blockCount;
this.blockNo=blockNo;
}
public void run(){
File file=new File(sourceFile);
long size=file.length();//原文件大小
long blockSize=size / blockCount;//文件块大小
byte [] dat=new byte[maxBufferSize];//缓存数组
long startPosition =blockSize*blockNo;//开始位置
try{
InputStream inputStream=new FileInputStream(sourceFile);
RandomAccessFile raf=new RandomAccessFile(targetFile,"rw");
int curRedLength;//当前读取字节数
int totalRedLength=0;//
raf.seek(startPosition);
inputStream.skip(startPosition);
while((curRedLength=inputStream.read(dat))>0 && totalRedLength<blockSize){
raf.write(dat, 0,curRedLength);
totalRedLength+=curRedLength;
}
inputStream.close();
raf.close();
}catch(IOException e){
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception{
sourceFile="h:\\dabaicai.exe";
targetFile="h:\\xiaobaicai.exe";
blockCount=5;
long a=System.currentTimeMillis();
for(int i=0;i<blockCount;i++){
stream12 copy=new stream12(sourceFile,targetFile,blockCount,i);
Thread thread =new Thread(copy);
thread.start();
try{
thread.join();
}catch(Exception e){
e.printStackTrace();
}
}
System.out.print(System.currentTimeMillis()-a);
}
} 展开
2013-10-26
展开全部
有啊,
boolean
renameTo(File dest)
重新命名此抽象路径名表示的文件。
比如C:/windows/1212.txt,要复制到上级目录,直接用renameTo(new File("C:/1212.txt"))
boolean
renameTo(File dest)
重新命名此抽象路径名表示的文件。
比如C:/windows/1212.txt,要复制到上级目录,直接用renameTo(new File("C:/1212.txt"))
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-10-26
展开全部
程序再快,也需要考虑硬件IO的速度的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询