java IO字符流 缓冲区类BufferedWriter与BufferedReader的用法

虽然在Reader父类与Writer父类中已经有了可以自己构造缓冲区并批量读取的方法read(char[] cbuf, int off, int len)、write(char[] cbuf, int off, int len);其中的cbuf字符数组就是缓冲区,但是java中已经为我们封装好了缓冲区类BufferedWriter与BufferedReader。我们来看看BufferedWriter的定义:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。可以指定缓冲区的大小,或者接受默认的大小。BufferedReader定义类似。那么我们就来试试怎么用两个缓冲区类。代码如下:

/**   
* @Title: IObufferDemo.java 
* @Package IOBuffer 
* @Description: TODO(介绍IO类中缓冲区类Buffer的用法) 
* @author Shaw   
* @date 2014年12月15日 下午7:54:50 
* @version V1.0   
*/
package IOBuffer;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class IObufferDemo {

	/**
	 * @throws IOException  
	 * @Title: main 
	 * @Description: TODO(介绍IO类中缓冲区类Buffer的用法) 
	 * @param @param args    
	 */
	public static void main(String[] args) throws IOException {
		bufferWriterShow();
		bufferReaderShow();

	}
	
	public static void bufferWriterShow() throws IOException {
		// TODO Writer方法展示
		FileWriter fw = new FileWriter("buf.txt");
		//为了提高效率,使用字符流的缓冲区。
		BufferedWriter bufw = new BufferedWriter(fw);
		
		bufw.write("balbljbidfe");
		bufw.newLine();
		bufw.write("dddddddd");
		
		//使用缓冲区的刷新方法将数据刷到目的地中
		bufw.flush();
		
		//关闭缓冲区。其实关闭的就是被缓冲的流对象。
		//缓冲区仅提高效率
		bufw.close();
	}
	
	public static void bufferReaderShow() throws IOException {
		// TODO Reader方法展示
		FileReader fr = new FileReader("buf.txt");//从外设中读取文件数据,该文件必须存在
		
		//为了提高效率,使用字符流的缓冲区。
		BufferedReader bufr = new BufferedReader(fr);
		//尝试BufferedReader中的方法readLine();
		String line = null;
		while((line = bufr.readLine())!=null){
			System.out.println(line);
		}	
	}
}

我们看到基本上和FileReader与FileWriter类没啥区别。有意思的一点是BufferedWriter类中有一个newLine()函数以及BufferedReader类中的readLine()函数。newLine()函数表示的是换行功能,readLine()函数表示的是读取文件中的一行的功能。这给我们在操作中提供了便利。我们来分析分析readLine()方法的具体操作过程:



首先,在生成缓冲区对象bufr(BufferedReader bufr = new BufferedReader(fr);)的同时,系统会调用bufr.read(buf);将硬盘中的数据部分读入到内存缓冲区中。此时bufr.read()方法(已经复写了父类Reader中的read()方法)即是从内存中读取数据,而父类Reader中的read()是从硬盘中读取数据,相比之下bufr.read()方法高效很多。那么,此时的readLine()方法如何读取一行的呢?实际上,在调用readLine()方法时候,该方法会调用一个临时容器(如StringBuilder),暂时存储通过bufr.read()方法从内存中得到的字符,在读取到换行字符的时候,该临时容器不再存入,而是直接输出(如图所示的字符串“abc”).

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值