标签:
如果我们想做一点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部分以后继续
标签:
原文地址:http://www.cnblogs.com/whx20202/p/4799817.html