FileChannel文件通道复制文件方法为什么比普通的要快好多?

drecoderlj 2017-02-07 05:15:19
求大神详解一下,API感觉看的云里雾里
...全文
709 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
FileChannel会产生缓冲区,比如读一个文件,就先将文件内容读到到缓冲区(内存),再进行操作,就不需要像InputStream每次读操作都要调用系统资源从文件处读取。 所以FileChannel与BufferedInputStream比较相似,运算的时间差不多。
pywepe 2017-02-09
  • 打赏
  • 举报
回复
有一个问题是,你说的“普通复制文件方法”是指什么方法?是不是如下所示:

FileInputStream in = ...
FileOutputStream out = ...

byte[] buf = ....
int pos = 0;
for(;;){
    int len = in.read(buf,pos,buf.length);
    if(len == -1) break;
    pos += len;
    out.write(buf,0,len);      
}
out.flush();
out.close();
in.close();

如果是的话,以下方法肯定是更快的:

FileChannelImpl的
private native long transferTo0(int var1, long var2, long var4, int var6);
pywepe 2017-02-09
  • 打赏
  • 举报
回复

FileChannelImpl的
private native long transferTo0(int var1, long var2, long var4, int var6);
pywepe 2017-02-09
  • 打赏
  • 举报
回复
我猜是可能是用了direct memory的缘故。我去看看代码。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧