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);
}
}
展开
 我来答
HEART_LX
2013-10-26
知道答主
回答量:28
采纳率:0%
帮助的人:17.9万
展开全部
...瓶颈在硬件读写速度.....不在你单线程还是多线程....windows复制更接近直接控制硬件自然效率更高

看你的代码...复制的读写依然是在同一个线程内做的...你只是把这个过程独立于主线程处理了....这不会提高什么速度吧......正常多线程复制应该是两个线程 一个只负责从原文件往缓冲区读 一个只负责从缓冲区往目标文件写....

如果想得到更快的复制速度....恐怕只能直接操作硬盘扇区?
匿名用户
2013-10-26
展开全部
有啊,
boolean
renameTo(File dest)

重新命名此抽象路径名表示的文件。

比如C:/windows/1212.txt,要复制到上级目录,直接用renameTo(new File("C:/1212.txt"))
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-10-26
展开全部
程序再快,也需要考虑硬件IO的速度的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式