實例如下所示:
package day0208; import java.io.FileReader;import java.io.IOException; /* * 自定義讀取緩衝區,實現BufferedReader功能* 分析: * 緩衝區就是封裝了一個數組,並對外提供了更多的方法對數組進行訪問* 其實這些方法最終操作的都是數組的角標* 緩衝的原理: * 其實就是從源中獲取一批數據裝進緩衝區,再從緩衝區取出數據* 當此次取完後,繼續從源中取出一批數據到緩衝區* 當源中的數據取光時,用-1作為結束標記。 */public class MyBufferReader { private FileReader r; MyBufferReader(FileReader r){ this.r=r; } //定義一個數組作為緩衝區private char[] buf=new char[1024]; //定義個指針用於操作這個數組的元素,當操作到最後一個元素後,指針應該歸零private int pos=0; //定義一個計數器,用於記錄緩衝區中的數據個數,當該數據減到0,就從源中繼續獲取數據到緩衝區中。 private int count =0; public int myRead() throws IOException{//自定義read方法if(count==0){//如果緩衝區中沒有數據,則從源中獲取一批數據到緩衝區count=r.read(buf); pos=0; } if(count<0){ return -1; } char ch=buf[pos++];//一次從緩衝區獲取一個字符count--; return ch; } public String myReadLine() throws IOException{//自定義readLine犯法StringBuilder sb=new StringBuilder(); int ch=0; while((ch=myRead())!=-1){//只要還有數據就進行讀取if(ch=='/n')//java換行符,停止讀取,將已經讀取到的數據輸出返回return sb.toString(); if(ch=='/r') continue;//window下的換行符,不讀也不換行,繼續讀取後面的字符sb.append((char)ch);//正常情況下,不斷進行讀取} if(sb.length()!=0)//如果文檔中中有字符,就返回讀取到的數據return sb.toString(); return null;//如果是空文檔,就返回空} public void myClose() throws IOException{ r.close();//關閉流資源}}這樣就Ok了,可以進行檢測
package day0208; import java.io.FileReader;import java.io.IOException; public class MyDemo { public static void main(String[] args) throws IOException { FileReader fw=new FileReader("C://demo2.txt"); MyBufferReader br=new MyBufferReader(fw); String line1=null; while((line1=br.myReadLine())!=null){ System.out.println(line1); }// int num=0;// while((num=br.myRead())!=-1){// System.out.print((char)num);// } br.myClose(); }}兩種檢測方法都可以。
以上這篇基於自定義BufferedReader中的read和readLine方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。