A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-1-26 16:41 编辑

下面一段使用FileChannel读写文件打印出来110毫秒:
public static void copyFile2(String sourceFile, String descFile) {
  try {
  long time = new Date().getTime();
  FileChannel inChannel = new FileInputStream(sourceFile).getChannel();
  FileChannel outChannel = new FileOutputStream(descFile).getChannel();
  try {
   inChannel.transferTo(0, inChannel.size(), outChannel);
  } catch (IOException e) {
   throw e;
  } finally {
   if (inChannel != null)
    inChannel.close();
   if (outChannel != null)
    outChannel.close();
  }
  long l = new Date().getTime() - time;
  System.out.println("拷贝结束!----耗时:" + l + "毫秒");
  } catch (Exception e) {
   e.printStackTrace();
  }
}

不使用FileChannel直接使用FileInputStream和FileOutputStream则快很多打印出来耗时0毫秒,这是为什么呢?

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
FileChannel 是那天的视频啊,怎么没见过
回复 使用道具 举报
FileChannel 是nio包下的类库,nio 是 java New IO 的简称,在 jdk1.4 里提供的新 api ,提供高性能的io操作,按理说nio应该比传统io快,但实际却没有传统的io快,这是为什么?
回复 使用道具 举报
这个是从百度百科搜到的简介:
    NIO 简介:nio 是java New IO 的简称,在jdk1.4 里提供的新api 。Sun 官方标榜的特性如下: 为所有的原始类型提供(Buffer) 缓存支持。 字符集编码解码解决方案。 Channel :一个新的原始I/O 抽象。 支持锁和内存映射文件的文件访问接口。 提供多路(non-bloking) 非阻塞式的高伸缩性网络I/O 。
   
个人理解:他说“为所有的原始类型提供(Buffer) 缓存支持”,提供缓存支持,对于小文件来说,它是会慢一些;缓存的优势会在大数据量时体现出来
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马