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();
}
}
21-IO流-17-IO流(字符流-缓冲区-自定义MyBufferedReader-readLine方法)
最新推荐文章于 2021-03-13 11:46:13 发布