黑马程序员技术交流社区

标题: 为什么使用FileChanel进行文件读写比不使用慢 [打印本页]

作者: yong230    时间: 2013-1-25 11:03
标题: 为什么使用FileChanel进行文件读写比不使用慢
本帖最后由 张向辉 于 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毫秒,这是为什么呢?

作者: 梁俊    时间: 2013-1-25 14:02
FileChannel 是那天的视频啊,怎么没见过
作者: yong230    时间: 2013-1-25 14:18
FileChannel 是nio包下的类库,nio 是 java New IO 的简称,在 jdk1.4 里提供的新 api ,提供高性能的io操作,按理说nio应该比传统io快,但实际却没有传统的io快,这是为什么?
作者: 黄锦成    时间: 2013-1-25 19:15
这个是从百度百科搜到的简介:
    NIO 简介:nio 是java New IO 的简称,在jdk1.4 里提供的新api 。Sun 官方标榜的特性如下: 为所有的原始类型提供(Buffer) 缓存支持。 字符集编码解码解决方案。 Channel :一个新的原始I/O 抽象。 支持锁和内存映射文件的文件访问接口。 提供多路(non-bloking) 非阻塞式的高伸缩性网络I/O 。
   
个人理解:他说“为所有的原始类型提供(Buffer) 缓存支持”,提供缓存支持,对于小文件来说,它是会慢一些;缓存的优势会在大数据量时体现出来




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2