JAVA中常用IO流类:BufferedReader和BufferedWriter .

来源:互联网 发布:淘宝助理5一键下架宝贝 编辑:程序博客网 时间:2024/06/05 07:25

http://blog.csdn.net/caixiexin/article/details/6719482

BufferedReader类用于缓冲读取字符,将字节流封装成BufferedReader对象,然后用readLine()逐行读入字符流,直到遇到换行符为止(相当于反复调用Reader类对象的read()方法读入多个字符)

下面摘抄自JAVA API文档

 

public class BufferedReader
extends Reader

从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。

通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,

 BufferedReader in   = new BufferedReader(new FileReader("foo.in")); 

将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。

通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。

行本地化。

构造方法摘要BufferedReader(Reader in) 
          创建一个使用默认大小输入缓冲区的缓冲字符输入流。BufferedReader(Reader in, int sz) 
          创建一个使用指定大小输入缓冲区的缓冲字符输入流。 方法摘要 voidclose() 
          关闭该流并释放与之关联的所有资源。 voidmark(int readAheadLimit) 
          标记流中的当前位置。 booleanmarkSupported() 
          判断此流是否支持 mark() 操作(它一定支持)。 intread() 
          读取单个字符。 intread(char[] cbuf, int off, int len) 
          将字符读入数组的某一部分。 StringreadLine() 
          读取一个文本行。 booleanready() 
          判断此流是否已准备好被读取。 voidreset() 
          将流重置到最新的标记。 longskip(long n) 
          跳过字符。

 

BufferedWriter提供字符的缓冲写出功能

以下摘自JAVA API文档

public class BufferedWriter
extends Writer

将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。

该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。

通常 Writer 将其输出立即发送到底层字符或字节流。除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)。例如,

 PrintWriter out   = new PrintWriter(new BufferedWriter(new FileWriter("foo.out"))); 

将缓冲 PrintWriter 对文件的输出。如果没有缓冲,则每次调用 print() 方法会导致将字符转换为字节,然后立即写入到文件,而这是极其低效的。

 

实例:使用字符处理流实现文件复制

 

[java] view plaincopyprint?
  1. import java.io.*;  
  2. class IODemo  
  3. {  
  4.     public static void main(String[] args)   
  5.     {  
  6.         try  
  7.         {  
  8.         //使用BufferedReader和BufferedWriter进行文件复制(操作的是字符,以行为单位读入字符)  
  9.         FileReader fr=new FileReader("a.txt");  
  10.         BufferedReader br=new BufferedReader(fr);  
  11.         FileWriter fw=new FileWriter("d.txt");  
  12.         BufferedWriter bw=new BufferedWriter(fw);  
  13.   
  14.         String s=br.readLine();  
  15.             while(null!=s)  
  16.             {  
  17.                 bw.write(s);  
  18.                 //由于BufferedReader的rendLIne()是不读入换行符的,所以写入换行时须用newLine()方法  
  19.                 bw.newLine();  
  20.                 //read=fis.read(b);  
  21.                 s=br.readLine();  
  22.             }  
  23.   
  24.             br.close();  
  25.             bw.close();  
  26.         }  
  27.         catch (IOException e)  
  28.         {  
  29.             e.printStackTrace();  
  30.         }  
  31.           
  32.     }  
  33. }  


 注:议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。