您好,登錄后才能下訂單哦!
實例如下所示:
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方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。