[二十二]JavaIO之LineNumberReader


功能介紹


LineNumberReader是提供了行號的具體的裝飾器類

跟蹤行號的緩衝字符輸入流
此類定義了方法 setLineNumber(int) 和 getLineNumber(),它們可分別用於設置和獲取當前行號
默認狀況下,行編號從 0 開始
該行號隨數據讀取在每一個 行結束符 處遞增,而且能夠經過調用 setLineNumber(int) 更改行號
可是,setLineNumber(int) 不會實際更改流中的當前位置;
它只更改將由 getLineNumber() 返回的值


有的朋友可能以爲,這也叫裝飾器模式麼?
仍是那句話
設計模式是做爲解決問題或者設計類層級結構時的一種思惟的存在,而不是公式同樣的存在!


image_5b9a564e_6234

構造方法


LineNumberReader 繼承了BufferedReader
構造方法跟BufferedReader 同樣
內部也是直接
super
image_5b9a564e_23d1

其餘方法


read以及readLine方法

仔細看下兩個版本的read方法  以及 readLine方法
他們都是
super.XXX
而後在此基礎上提供了行號的功能
int read()
          讀取單個字符
int read(char[] cbuf, int off, int len)
          將字符讀入數組中的某一部分
readLine()
          讀取文本行
image_5b9a564e_690



BufferedReader是支持標記
因此LineNumberReader也是自動支持了
內部藉助的也是super.XXX
image_5b9a564e_8be

也例行提供了skip
裏面的read 是super.read.....
image_5b9a564e_5f60


總結

LineNumberReader自己並無太多的東西,他是BufferedReader的子類
他的邏輯意義,很是典型簡單的裝飾器模式
是你還有你,一切拜託你,而後本身增長了點小功能

構造調用父類構造方法,裏面的方法也都是藉助於super.XXX
只不過增長了行號的功能

必定要記住,setLineNumber(int) 並不會改變流
只是改變內部的那個    private int lineNumber = 0;
相關文章
相關標籤/搜索