官术网_书友最值得收藏!

2.1.2 完整的流家族

與C語言只有單一類型FILE*包打天下不同,Java擁有一個流家族,包含各種輸入/輸出流類型,其數量超過60個!請參見圖2-1和圖2-2。

圖2-1 輸入流與輸出流的層次結構

讓我們把輸入/輸出流家族中的成員按照它們的使用方法來進行劃分,這樣就形成了處理字節和字符的兩個單獨的層次結構。正如所見,InputStream和OutputStream類可以讀寫單個字節或字節數組,這些類構成了圖2-1所示的層次結構的基礎。要想讀寫字符串和數字,就需要功能更強大的子類,例如,DataInputStream和DataOutputStream可以以二進制格式讀寫所有的基本Java類型。最后,還包含了多個很有用的輸入/輸出流,例如,ZipInputStream和ZipOutputStream可以以常見的ZIP壓縮格式讀寫文件。

另一方面,對于Unicode文本,可以使用抽象類Reader和Writer的子類(請參見圖2-2)。Reader和Writer類的基本方法與InputStream和OutputStream中的方法類似。

read方法將返回一個Unicode碼元(一個在0~65535之間的整數),或者在碰到文件結尾時返回-1。write方法在被調用時,需要傳遞一個Unicode碼元(請查看卷Ⅰ第3章有關Unicode碼元的討論)。

圖2-2 Reader和Writer的層次結構

還有4個附加的接口:Closeable、Flushable、Readable和Appendable(請查看圖2-3)。前兩個接口非常簡單,它們分別擁有下面的方法:

InputStream、OutputStream、Reader和Writer都實現了Closeable接口。

注意:java.io.Closeable接口擴展了java.lang.AutoCloseable接口。因此,對任何Closeable進行操作時,都可以使用try-with-resource語句(try-with-resource語句是指聲明了一個或多個資源的try語句——譯者注)。為什么要有兩個接口呢?因為Closeable接口的close方法只拋出IOException,而AutoCloseable.close方法可以拋出任何異常。

圖2-3 Closeable、Flushable、Readable和Appendable接口

而OutputStream和Writer還實現了Flushable接口。

Readable接口只有一個方法:

CharBuffer類擁有按順序和隨機地進行讀寫訪問的方法,它表示一個內存中的緩沖區或者一個內存映像的文件(請參見2.6.2節以了解細節)。

Appendable接口有兩個用于添加單個字符和字符序列的方法:

CharSequence接口描述了一個char值序列的基本屬性,String、CharBuffer、StringBuilder和StringBuffer都實現了它。

在流類的家族中,只有Writer實現了Appendable。

java.io.Closeable 5.0

·void close()

關閉這個Closeable,這個方法可能會拋出IOException。

java.io.Flushable 5.0

·void flush()

沖刷這個Flushable。

java.lang.Readable 5.0

·int read(CharBuffer cb)

嘗試著向cb讀入其可持有數量的char值。返回讀入的char值的數量,或者當從這個Readable中無法再獲得更多的值時返回-1。

java.lang.Appendable 5.0

·Appendable append(char c)

·Appendable append(CharSequence cs)

向這個Appendable中追加給定的碼元或者給定的序列中的所有碼元,返回this。

java.lang.CharSequence 1.4

·char charAt(int index)

返回給定索引處的碼元。

·int length()

返回在這個序列中的碼元的數量。

·CharSequence subSequence(int startIndex,int endIndex)

返回由存儲在startIndex到endIndex-1處的所有碼元構成的CharSequence。

·String toString()

返回這個序列中所有碼元構成的字符串。

主站蜘蛛池模板: 彭泽县| 邻水| 柯坪县| 无棣县| 威海市| 盐津县| 广州市| 荥经县| 获嘉县| 漳平市| 常德市| 平远县| 古浪县| 岑巩县| 当阳市| 个旧市| 蕲春县| 晋城| 静宁县| 大方县| 日照市| 潢川县| 乌审旗| 左贡县| 大余县| 凤山市| 怀远县| 克拉玛依市| 陆河县| 西贡区| 牡丹江市| 图木舒克市| 巴东县| 肇州县| 井冈山市| 聂拉木县| 万安县| 陆川县| 赞皇县| 通化县| 阜阳市|