Java中I/O庫的設計原則

來源:互聯網
上載者:User

標籤:

面試中遇到了此類題目,再次做個記錄,以備只需!

1.在Java的I/O中有兩個設計的結構:裝飾模式和適配器模式

2.Java庫中的對稱性:

(1)輸出-輸入對稱:處理Byte流的InputStream和OutputStream;處理Char流的Reader和Writer。

(2)byte-char對稱:InputStream與Reader的子類分別負責Byte和Char的輸入;OutputStream與Writer的子類分別負責Byte和Char流的輸出,它們分別形成平行的等級結構。

3.模式應用:

裝飾模式:

InputStream的裝飾模式

裝飾模式的各個角色:

(1)抽象構件(Component)角色:由InputStream扮演。這是一個抽象類別,為各種子類型流處理器提供統一的介面。

(2)具體構件(ConcreteComponent)角色:由ByteArrayInputStream、FileInputStream、 PipedInputStream以及StringBufferInputStream等原始流處理器扮演。他們實現了抽象構件角色所規定的介面,可以被 連結流處理器所裝飾。

(3)抽象裝飾(Decorator)角色:由FilterInputStream扮演。它實現了InputStream所規定的介面。

(4)具體裝飾(ConcreteDecorator)角色:由幾個類扮演,分別是DataInputStream、BufferInputStream以及兩個不常用的類LineNumberInputStream和PushBackInputStream

注意:StringBufferInputStream、LineNumberInputStream已經過時,不再推薦使用。

OutputStream的裝飾模式:

裝飾模式中的各個角色:

(1)抽象構件(Component)角色:由OutputStream扮演。這是一個抽象類別,為各種的子類型流處理器提供統一的介面。

(2)具體構件(ConcreteComponent)角色:由ByteArrayOutputStream、FileOutputStream以及PipedOutputStream等扮演,它們均實現了OutputStream所聲明的介面。

(3)抽象裝飾(Decorator)角色:由FilterOutputStream扮演。它有與OutputStream相同的介面,而這正是裝飾類的關鍵。

(4)具體裝飾(ConcreteDecorator)角色:由幾個類扮演,分別是BufferedOutputStream、DataOutputStream,以及PrintStream。

Reader中的裝飾模式:

裝飾模式中的各個角色:

(1)抽象構件(Component)角色: 由Reader扮演。這是一個抽象類別,為各種的子類型流處理器提供統一的介面。

(2)具體構件(ConcreteComponent)角色:有CharArrayReader、InputStreamReader、PipedReader以及StringReader等扮演,它們均實現了Reader所聲明的介面

(3)抽象裝飾(Decorator)角色:由BufferedReader以及FilterReader扮演。這兩者有著與Readeer相同的介面,而這正是裝飾類的關鍵

(4)具體裝飾(ConcreteD)角色:分別是LineNumberReader作為BufferedReader的具體裝飾角色,PushbackReader作為FilterReader的具體裝潢角色。

Writer中的裝飾模式:

裝飾模式中的各個角色:

(1)抽象構件(Component)角色:由Writer扮演。這是一個抽象類別,為各種的子類型流處理器提供統一的介面。

(2)具體構件(ConcreteComponent)角色:由CharArrayWriter、OutputStreamWriter、PipedWriter以及StringWriter等扮演,它們均實現了Reader所聲明的介面。

(3)抽象裝飾(Decorator)角色:由BufferedWriter、FilterWriter以及PrintWriter扮演,它們有著與Writer相同的介面。

(4)具體裝飾(ConcreteDecorator)角色:是與抽象裝飾角色合并的。由於抽象裝飾角色與具體裝飾角色發生合并,因為裝飾模式在這裡被簡化了。

-----------------------------------------------------華麗的分割線----------------------------------------------------------------

適配器模式的應用:

ByteArrayInputStream是一個適配器類:

FileOutputStream是一個適配器類:

StringBufferInputStream是一個適配器類:

ByteArrayOutputStream是一個適配器類:

PipedOutputStream是一個適配器類:

CharArrayReader是一個適配器類:

StringReader是一個適配器類:

其他,關於InputStreamReader,PipedReader等也都是適配器類。

CharArrayWriter是一個適配器類:

PipedWriter是一個適配器類:

StringWriter是一個適配器類:

參考:

http://www.2cto.com/kf/201404/291510.html

http://my.oschina.net/gao0516/blog/136103

Java中I/O庫的設計原則

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.