分類  >  編程 >

JAVA之IO技術自定義裝點類MybufferedReader

tags:    時間:2014-05-04 18:39:40
JAVA之IO技術自定義裝飾類MybufferedReader
package ioTest.io2;  import java.io.FileReader; import java.io.IOException;  /*  * 自定義的BufferedReader類  * MyBufferedReaderDemo:也是為了提高對流的操作性能。  * 所以構造函數中應該將流傳入  *   * --------拓展:裝飾設計模式  * 裝飾設計模式是28種設計模式之一.目的是為了增強功能.  * 將被增強的類A->增強類B  * 將A的對象做為參數,傳遞給B,讓B類對A類進行增強。這就是裝飾類的基本原理。  * 具體操作時這樣,構造函數B(A a)  * 這樣B類就成了A類的增強類。  *   * 顯然之前我們學習的BufferedReader,BufferedWriter也同樣是增強類。  * BufferedWriter(Writer out)            創建一個使用默認大小輸出緩衝區的緩衝字元輸出流。  * 因為此類把Writer的對象做為參數,傳遞給了構造函數。但同時BufferedWriter  * 又是Writer的子類。  *   * 那麼裝飾和繼承的區別是什麼呢?---將在下一個實例中進行分析哦。  *   *   */ public class MyBufferedReaderDemo { 	//為了更易擴展,可以寫成下面這樣。 	//就是傳遞最頂層的父類對象作為參數 Reader r 	private FileReader r; 	MyBufferedReaderDemo(FileReader r) 	{ 		this.r=r; 	} 	StringBuilder sBuilder=null; 	int ch=0; 	public String MyReadLine() throws IOException { 		while((ch=r.read())!=-1) 		{ 			//如何判斷讀取了一行,對行終止符的處理 			if(ch=='\r') 				continue; 			if(ch=='\n') 				return sBuilder.toString(); 			else 				sBuilder.append((char)ch); 		} 		//上面的操作還存在一點小問題,就是如果讀到最後一行沒有回車,也就是說沒有\n 		//這時候,只做上面的操作,會丟失掉最後一行數據。所以這時候添加以個判斷就OK 		if(sBuilder.length()>0) 			return sBuilder.toString(); 		return null; 	} 	public void Myclose() throws IOException 	{ 		r.close(); 	} } 
//在設計模式欄目下可以找到裝飾設計模式的文章哦

推薦閱讀文章

Bookmark the permalink ,來源:互聯網