1. 程式人生 > >字符流-緩沖區-自定義myBufferedReader

字符流-緩沖區-自定義myBufferedReader

計數 取數 ++ pen read lose 文件 模擬 就是

public class myBufferedReaderDemo {

public static void main(String[] arg) throws IOException{
FileReader fr = new FileReader("demo.txt");

MyBufferedReader bufr = new MyBufferedReader(fr);
String line = null;
while((line = bufr.myReadLine()) != null){
System.out.println(line);
}
}
}

//自定義緩沖區文件

/*
* 自定義的讀取緩沖區。其實就是模擬一個BufferedReader
* 分析:
* 緩沖區無非就是封裝一個數組
* 並對外提供更多的方法對數組進行訪問。
*
* 緩沖的原理:
* 其實就是從源中獲取一批數據裝進緩沖區。
* 在緩沖區中不斷的去處一個一個數據。
*
* 在此次取完後,在從源中繼續取一批數據進緩沖區。
* 當源中的數據取光時,用-1作為結束標記。
*
*
*
*/

public class MyBufferedReader {
private FileReader r;
//定義一個字符數組作為緩沖區
private char[] buf = new char[1024];

//定義一個指針用於操作這個數組的元素,當操作到最後一個元素後,指針應該歸零。
private int pos =0;

//定義一個計數器用於記錄緩沖區的數據個數,當該數據減到0,就從源中繼續獲取數據到緩存區。
private int count =0;

MyBufferedReader(FileReader fileReader){
this.r = fileReader;
}

public int myRead() throws IOException{
//優化後的代碼
if (count ==0) {
count = r.read(buf);
pos = 0;
}
if (count < 0) {
return -1;
}
char ch = buf[pos++];
count --;
return ch;


/*
//1.從源中獲取一批數據到緩沖區。需要先做判斷,只有計數器為0時,才需要從源中獲取數據。
if (count == 0) {
count = r.read(buf);
if (count < 0) {
return -1;
}
//每次獲取數據到緩沖區時,角標為0
pos = 0;
char ch = buf[pos];

pos ++;
count --;
return ch;
}else if (count > 0) {
char ch = buf[pos];

pos ++;
count --;
return ch;
}


*/
}
public String myReadLine()throws IOException {

StringBuilder sb =new StringBuilder();
int ch = 0;
while((ch= myRead()) != -1){
if (ch == ‘\r‘) {
continue;
}
if (ch == ‘\n‘) {
return sb.toString();
}
sb.append((char)ch);
}
if (sb.length() != 0) {
return sb.toString();
}
return null;

}
public void myClose() throws IOException{
this.r.close();
}

}

字符流-緩沖區-自定義myBufferedReader