21-IO流-17-IO流(字符流-缓冲区-自定义MyBufferedReader-readLine方法)

package demo;

import java.io.FileReader;
import java.io.IOException;

public class MyBufferedReader2 {

	private static final int BUF_SIZE = 1024;

	private FileReader r;
	
	private char[] buf = new char[BUF_SIZE];
	
	private int pos = 0;
	
	private int count = 0;
	
	public MyBufferedReader2(FileReader r){
		 
		this.r = r;
	}
	
	public int myRead() throws IOException{
		
		if(count == 0)
			count = r.read(buf);
			pos = 0;
		if(count < 0)
			return -1;
		
		char ch = buf[pos];
		pos++;
		count--;
		return ch;
	}
	
//其实readLine方法就是基于read方法,多建立一个临时容器,多判断一次结束标记(即换行符)
	public String myReadLine() throws IOException{
		
		StringBuilder sb = new StringBuilder();//建立一个readLine方法特有的临时容器
		
		int ch = 0;
		while((ch = myRead())!=-1){//既然是基于read方法,直接调用即可
			
			if(ch == '\r')//读到换行符,既不存也不return,那么continue
				continue;
			if(ch == '\n')//读到回车符,表示一行已经读完,直接return
				return sb.toString();//return一次,就将sb释放一次,即第一行数据输出,sb空了,再装第二行数据
			sb.append((char)ch);//由于read方法读到的是字符的ASC码,所以这里要做强转动作
		}
		
		if(sb.length()!=0)//这里判断是为了防止最后一行末尾不是回车符,如果不是回车符,则按照上面while循环,继续往
			//sb里面装,但是不return,所以这里加个if判断,只要sb长度不为0,表示里面有东西,那么再return一次,防止丢数据。
			return sb.toString();
		
	}
}














评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值