码迷,mamicode.com
首页 > 编程语言 > 详细

Java 初步I/O理解

时间:2015-09-11 06:42:35      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:

如果我们想做一点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部分以后继续

Java 初步I/O理解

标签:

原文地址:http://www.cnblogs.com/whx20202/p/4799817.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!