基于自定義BufferedReader中的read和readLine方法
更新時間:2017年12月15日 14:45:42 作者:fu1990@126
下面小編就為大家分享一篇基于自定義BufferedReader中的read和readLine方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
實例如下所示:
package day0208; import java.io.FileReader; import java.io.IOException; /* * 自定義讀取緩沖區(qū),實現(xiàn)BufferedReader功能 * 分析: * 緩沖區(qū)就是封裝了一個數(shù)組,并對外提供了更多的方法對數(shù)組進行訪問 * 其實這些方法最終操作的都是數(shù)組的角標 * 緩沖的原理: * 其實就是從源中獲取一批數(shù)據(jù)裝進緩沖區(qū),再從緩沖區(qū)取出數(shù)據(jù) * 當此次取完后,繼續(xù)從源中取出一批數(shù)據(jù)到緩沖區(qū) * 當源中的數(shù)據(jù)取光時,用-1作為結(jié)束標記。 */ public class MyBufferReader { private FileReader r; MyBufferReader(FileReader r){ this.r=r; } //定義一個數(shù)組作為緩沖區(qū) private char[] buf=new char[1024]; //定義個指針用于操作這個數(shù)組的元素,當操作到最后一個元素后,指針應該歸零 private int pos=0; //定義一個計數(shù)器,用于記錄緩沖區(qū)中的數(shù)據(jù)個數(shù),當該數(shù)據(jù)減到0,就從源中繼續(xù)獲取數(shù)據(jù)到緩沖區(qū)中。 private int count =0; public int myRead() throws IOException{//自定義read方法 if(count==0){//如果緩沖區(qū)中沒有數(shù)據(jù),則從源中獲取一批數(shù)據(jù)到緩沖區(qū) count=r.read(buf); pos=0; } if(count<0){ return -1; } char ch=buf[pos++];//一次從緩沖區(qū)獲取一個字符 count--; return ch; } public String myReadLine() throws IOException{//自定義readLine犯法 StringBuilder sb=new StringBuilder(); int ch=0; while((ch=myRead())!=-1){//只要還有數(shù)據(jù)就進行讀取 if(ch=='\n')//java換行符,停止讀取,將已經(jīng)讀取到的數(shù)據(jù)輸出返回 return sb.toString(); if(ch=='\r') continue;//window下的換行符,不讀也不換行,繼續(xù)讀取后面的字符 sb.append((char)ch);//正常情況下,不斷進行讀取 } if(sb.length()!=0)//如果文檔中中有字符,就返回讀取到的數(shù)據(jù) return sb.toString(); return null;//如果是空文檔,就返回空 } public void myClose() throws IOException{ r.close();//關(guān)閉流資源 } }
這樣就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方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于synchronized的參數(shù)及其含義
這篇文章主要介紹了synchronized的參數(shù)及其含義詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Springboot集成Kafka實現(xiàn)producer和consumer的示例代碼
這篇文章主要介紹了Springboot集成Kafka實現(xiàn)producer和consumer的示例代碼,詳細的介紹了什么是Kafka和安裝Kafka以及在springboot項目中集成kafka收發(fā)message,感興趣的小伙伴們可以參考一下2018-05-05

Linux?Ubuntu系統(tǒng)下配置JDK環(huán)境、MySQL環(huán)境全過程
眾所周知Ubuntu是一種基于Linux的操作系統(tǒng),它提供了一個穩(wěn)定、安全和易于使用的環(huán)境,下面這篇文章主要給大家介紹了關(guān)于Linux?Ubuntu系統(tǒng)下配置JDK環(huán)境、MySQL環(huán)境的相關(guān)資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
2024-07-07 
Jenkins初級應用之Invoke?Phing?targets插件配置
這篇文章主要為大家介紹了Jenkins初級應用之Invoke?Phing?targets的插件配置,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪<BR>
2022-04-04 
springsecurity 企業(yè)微信登入的實現(xiàn)示例
本文主要介紹了springsecurity 企業(yè)微信登入的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
2022-04-04