Java IO筆記(FilterReader/FilterWriter)


(最近剛來到簡(jiǎn)書平臺(tái)鹅很,以前在CSDN上寫的一些東西像吻,也在逐漸的移到這兒來,有些篇幅是很早的時(shí)候?qū)懴碌纳装虼丝赡軙?huì)看到一些內(nèi)容雜亂的文章晃琳,對(duì)此深感抱歉,以下為正文)


正文

本篇講述的是Java IO包中的FilterReader和FilterWriter類琐鲁,它們同F(xiàn)ilterInputStream和FilterOutputStream類一樣卫旱,是Reader和Writer的包裝類,為Reader和Writer提供了更多的功能围段,下面先貼上源碼顾翼,對(duì)其進(jìn)行簡(jiǎn)單的分析。
FilterReader.java

package java.io;
 
public abstract class FilterReader extends Reader {
 
    //內(nèi)置了一個(gè)Reader對(duì)象句柄in奈泪,用于接收傳入的Reader對(duì)象适贸。
    protected Reader in;
 
    /**
     * 帶一個(gè)參數(shù)的構(gòu)造方法,傳入的參數(shù)類型為一個(gè)Reader對(duì)象涝桅。內(nèi)部直接調(diào)用父類Reader對(duì)象的對(duì)應(yīng)構(gòu)造方法拜姿,并為內(nèi)置的Reader對(duì)象句柄in賦值。
     */
    protected FilterReader(Reader in) {
        super(in);
        this.in = in;
    }
 
    /**
     * 該方法每次讀取讀取一個(gè)字符的數(shù)據(jù)冯遂,實(shí)質(zhì)就是調(diào)用Reader中對(duì)應(yīng)的read方法蕊肥。
     */
    public int read() throws IOException {
        return in.read();
    }
 
    /**
     * 該方法每次能夠讀取多個(gè)字符的數(shù)據(jù),包含三個(gè)參數(shù)蛤肌,第一個(gè)參數(shù)為一個(gè)字符數(shù)組壁却,用于存放讀取的數(shù)據(jù)內(nèi)容,第二和第三個(gè)參數(shù)都是一個(gè)int型數(shù)值寻定,分別表示著
     * 在數(shù)組中存放數(shù)據(jù)的起點(diǎn)以及存儲(chǔ)數(shù)據(jù)的長(zhǎng)度儒洛。內(nèi)部實(shí)質(zhì)直接調(diào)用Reader中對(duì)應(yīng)的read方法。
     */
    public int read(char cbuf[], int off, int len) throws IOException {
        return in.read(cbuf, off, len);
    }
 
    /**
     * 該方法可以跳過指定字符數(shù)量的數(shù)據(jù)狼速。內(nèi)部實(shí)質(zhì)直接調(diào)用Reader中對(duì)應(yīng)的read方法琅锻。
     */
    public long skip(long n) throws IOException {
        return in.skip(n);
    }
 
    /**
     * 該方法用于判斷當(dāng)前流是否處于可讀狀態(tài)
     */
    public boolean ready() throws IOException {
        return in.ready();
    }
 
    /**
     * 該方法用于判斷當(dāng)前流是否支持流標(biāo)記功能。
     */
    public boolean markSupported() {
        return in.markSupported();
    }
 
    /**
     * 該方法用于在指定位置留下標(biāo)記向胡,以便于跟reset方法聯(lián)合使用恼蓬,從而可以使流回退到標(biāo)記的地方。內(nèi)部實(shí)質(zhì)是直接調(diào)用Reader的mark方法僵芹。
     */
    public void mark(int readAheadLimit) throws IOException {
        in.mark(readAheadLimit);
    }
 
    /**
     * 該方法用于與mark方法聯(lián)用处硬,用于將當(dāng)前流的讀取位置回退到標(biāo)記的地方。內(nèi)部實(shí)質(zhì)是直接調(diào)用Reader的reset方法拇派。
     */
    public void reset() throws IOException {
        in.reset();
    }
 
    
    /**
     * 該方法用于關(guān)閉當(dāng)前的流及與之相關(guān)聯(lián)的系統(tǒng)資源荷辕。內(nèi)部實(shí)質(zhì)是直接調(diào)用Reader對(duì)應(yīng)的close方法凿跳。
     */
    public void close() throws IOException {
        in.close();
    }
}
FilterWriter:
package java.io;
 
 
public abstract class FilterWriter extends Writer {
 
    //內(nèi)置了一個(gè)Writer對(duì)象的句柄,用于接收傳入的Writer對(duì)象疮方。
    protected Writer out;
 
    /**
     * 一個(gè)帶一個(gè)參數(shù)的構(gòu)造方法控嗜,傳入的參數(shù)是一個(gè)Writer對(duì)象。內(nèi)部實(shí)質(zhì)上是調(diào)用Writer對(duì)應(yīng)的構(gòu)造方法骡显,并為內(nèi)置的Writer對(duì)象句柄賦值疆栏。
     */
    protected FilterWriter(Writer out) {
        super(out);
        this.out = out;
    }
 
    /**
     * 該方法可以每次寫入一個(gè)字符的數(shù)據(jù),傳入的參數(shù)為要寫入字符數(shù)據(jù)的int型值惫谤。內(nèi)部實(shí)質(zhì)是調(diào)用Writer對(duì)應(yīng)的構(gòu)造方法壁顶。
     */
    public void write(int c) throws IOException {
        out.write(c);
    }
 
    /**
     * 該方法可以每次寫入多個(gè)字符的數(shù)據(jù),含有3個(gè)參數(shù)溜歪,第一個(gè)參數(shù)為一個(gè)字符型數(shù)組若专,其中包含要寫入的數(shù)據(jù),第二和第三個(gè)參數(shù)都是一個(gè)int型數(shù)值
     * 分別表示了從數(shù)組中取出數(shù)據(jù)的起點(diǎn)和長(zhǎng)度痹愚。內(nèi)部本質(zhì)是直接調(diào)用Writer對(duì)應(yīng)的write方法富岳。
     */
    public void write(char cbuf[], int off, int len) throws IOException {
        out.write(cbuf, off, len);
    }
 
    /**
     * 該方法可以每次寫入一個(gè)字符串類型的數(shù)據(jù)(可以截取一部分),含有3個(gè)參數(shù)拯腮,第一個(gè)參數(shù)為要寫入的字符串類型的數(shù)據(jù)窖式,第二和第三個(gè)參數(shù)都是
     * 一個(gè)int型數(shù)據(jù),分別代表截取字符串?dāng)?shù)據(jù)的起點(diǎn)和終點(diǎn)动壤。內(nèi)部本質(zhì)上是直接調(diào)用Writer對(duì)應(yīng)的write方法萝喘。
     */
    public void write(String str, int off, int len) throws IOException {
        out.write(str, off, len);
    }
 
    /**
     * 該方法用于將緩存中的數(shù)據(jù)強(qiáng)制寫出。內(nèi)部實(shí)質(zhì)上是調(diào)用Writer的flush方法琼懊。
     */
    public void flush() throws IOException {
        out.flush();
    }
 
    /**
     * 該方法用于關(guān)閉當(dāng)前流以及其相關(guān)聯(lián)的系統(tǒng)資源阁簸。內(nèi)部實(shí)質(zhì)上是調(diào)用Writer的close方法。
     */
    public void close() throws IOException {
        out.close();
    }
 
}

通過對(duì)源碼的簡(jiǎn)單分析哼丈,我們也不難看出FilterReader/FilterWriter和之前說過的FilterInputStream/FilterOutputStream一樣启妹,都是一個(gè)包裝類,它們本身并沒有什么特別大的意義醉旦,更多的是定義了標(biāo)準(zhǔn)饶米,具體的實(shí)現(xiàn)是由子類來實(shí)現(xiàn)的,這里再次牽扯到了裝飾者模式车胡,將在其它的篇幅中介紹到檬输。

以上為本篇的全部?jī)?nèi)容。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匈棘,一起剝皮案震驚了整個(gè)濱河市丧慈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌主卫,老刑警劉巖逃默,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹃愤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡笑旺,警方通過查閱死者的電腦和手機(jī)昼浦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門馍资,熙熙樓的掌柜王于貴愁眉苦臉地迎上來筒主,“玉大人,你說我怎么就攤上這事鸟蟹∥诿睿” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵建钥,是天一觀的道長(zhǎng)藤韵。 經(jīng)常有香客問我,道長(zhǎng)熊经,這世上最難降的妖魔是什么泽艘? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮镐依,結(jié)果婚禮上匹涮,老公的妹妹穿的比我還像新娘。我一直安慰自己槐壳,他們只是感情好然低,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著务唐,像睡著了一般雳攘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枫笛,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天吨灭,我揣著相機(jī)與錄音,去河邊找鬼刑巧。 笑死喧兄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的海诲。 我是一名探鬼主播繁莹,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼特幔,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了薄风?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤循诉,失蹤者是張志新(化名)和其女友劉穎撇他,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體划纽,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡勇劣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年潭枣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盆犁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡侈百,死狀恐怖翰铡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锭魔,我是刑警寧澤例证,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布迷捧,位于F島的核電站,受9級(jí)特大地震影響漠秋,放射性物質(zhì)發(fā)生泄漏笙蒙。R本人自食惡果不足惜庆锦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧艇搀,春花似錦、人聲如沸焰雕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)辟宗。三九已至档插,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間郭膛,已是汗流浹背氛悬。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留如捅,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓己肮,卻偏偏與公主長(zhǎng)得像悲关,于是被迫代替她去往敵國(guó)和親谎僻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寓辱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容