Java 初步I/O理解

如果我们想做一点I/O上的操作,比如拷贝文件,在网上搜到了这么一串代码:

 1 import java.io.*;
 2 public class SS {
 3     public static void main(String[] args) throws Exception {
 4         File f = new File("d:\\大型数据库文件.mdf");    
 5         FileInputStream fis = new FileInputStream(f);
 6         FileOutputStream fos = new FileOutputStream("e:\\" + f.getName());    
 7         int length = 0;
 8         byte[] b = new byte[1024];
 9         while((length = fis.read(b)) != -1)
10         {
11             fos.write(b, 0, length);
12         }
13         fos.close();
14         fis.close();
15     }
16 }

 

这段代码用File对象构造了一个FileInputStream对象,用作读入内存;又弄了一个FileOutputStream对象,用作输出到硬盘。

每次先从D盘读1024个byte到内存,然后再写到E盘去,看似没什么问题。

然而,每次read 1024个byte的时候都要开启一次磁盘I/O,这无疑是非常耗时的。

如果使用BufferedInputStream,则会好很多。

BufferedInputStream在内部维护了一个buffer,我们每次read其实是在read buffer,只有buffer不够大了,才会去read磁盘。这样可以很大程度上减少I/O的次数,因为从硬盘里一次性读到buffer的byte比较多,那么以后读的话可以从buffer里直接读不用走硬盘。

NIO部分以后继续

posted @ 2015-09-11 02:58  ruiruige1991  阅读(125)  评论(0编辑  收藏  举报