JAVA IO架構

來源:互聯網
上載者:User

http://blog.csdn.net/licl19870605/archive/2010/05/18/5604327.aspx

 

JAVA IO架構

可從IO的類層次,IO架構的設計模式來論述。

總體來說,IO可以分為位元組流和字元流,不同在於字元流由位元組流封裝而來,在IO讀入之後經過JVM處理,把位元組流轉換成字元流。而字元流的字元採用哪種字元編碼實現由JVM預設編碼決定。
而每個流都分輸入和輸出,所以,總體來說,IO有四個頂層類:
InputStream
OutputStream
Reader
Writer

而作為機器層級於機器直接互動的則是位元組流:
InputStream
OutputStream

以IO的中間類,進行位元組流到字元流的轉換過渡,通常可作為字元流類的構造參數,可指定編碼:
InputStreamReader
OutputStreamWriter

而位元組流和字元流的緩衝容器來看有byte和char之分,所以派生出:
ByteArrayInputStream
ByteArrayOutputStream
CharArrayInputStream
CharArrayOutputStream

以上類只是表示流的表示形式,而在傳輸形式上還表現為是否有緩衝。所以,可以派生出子類為可緩衝類:
BufferInputStream
BufferOutputStream
BufferReader
BufferWriter

每一個頂層類都有對目錄檔案(File)的支援:
FileInputStream
FileOutputStream
FileReader
FileWriter

從整個類架構的結構實現的介面來看,頂層類:
InputStream implements Closable,
OutputStream implements Closable, Flushable
Reader implements Closable, Readable
Writer implements Closable, Flushable, Appendable
各個介面方法:
Closable: close();
Flushable: flush();
Readable: read(CharBuffer cb);
Appendable: append();
從IO類使用時的規則來看,實現這些方法就是很自然的了,也是必須要實現的。如:流使用完必須關閉,流輸出前必須重新整理。 注意的是,這四個頂層類都沒有實現Serializable介面。
java.io.Serializable雖然屬於IO架構,但其並不是直接作用於IO架構四個頂層IO類及其子類,而是作用於其它對象,使其可被序列化,再通過IO類對其進行輸入輸出。如:File、ObjectStreamClass、String。

在Java中,一個強大的功能就是可以對對象進行序列化,轉成二進位檔案輸出,也就是位元組流輸出而不是字元流輸出,所以有頂層的InputStream和OutputStream衍生類別:
ObjectInputStream
ObjectOutputStream

流包括了節點流和過濾流,注意的是過濾流,可在讀寫的同時對資料進行操作,並且實現了同步操作,頂層過濾流類:
FilterInputStream
FilterOutputStream
其子類則在其基礎上,對節點流進行封裝,常見子類有:
BufferInputStream          BufferOutputStream
DataInputStream            DataOutputStream
LineNumberInputStream      PrintStream
可參考子類的構造方法。

以上IO操作幾乎就是把流裝載到記憶體中,對其進行操作的時候是順序讀寫,而需要隨機讀寫時:
RandomAccessFile

Java IO 架構中主要應用了兩個設計模式:裝飾模式和適配器模式。

姑且就把Java IO劃分為元素和行為兩個部分,元素則是適配,行為則是裝飾加強。

適配器模式主要在於位元組流到字元流的轉換和元素的封裝上,如類:InputStreamReader, CharArrayReader, FileReader, PipedReader, StringReader。
裝飾模式主要在對流的強化之中,如緩衝、過濾、行定位等,如類:BufferedReader, FilterReader, LineNumberReader。

一個典型的例子就是:
BufferReader br = new BufferReader(new InputStreamReader(System.in));
綜合了兩種模式:把InputStream適配成InputStreamReader,再把InputStreamReader加強裝飾城BufferedReader。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.