更新時間:2021-03-18 來源:黑馬程序員 瀏覽量:
在計算機中,無論是文本、圖片、音頻還是視頻,所有文件都是以二進制(字節(jié))形式存在的,I/O流中針對字節(jié)的輸入/輸出提供了一系列的流,統(tǒng)稱為字節(jié)流。字節(jié)流是程序中最常用的流,根據(jù)數(shù)據(jù)的傳輸方向可將其分為字節(jié)輸入流和字節(jié)輸出流。在JDK中,提供了兩個抽象類InputStream和OutputStream,它們是字節(jié)流的頂級父類,所有的字節(jié)輸入流都繼承自InputStream,所有的字節(jié)輸出流都繼承自O(shè)utputStream。為了方便理解,可以把InputStream和OutputStream比作兩根“水管”,如圖1所示。
圖1 InputStream和OutputStream
圖1中,InputStream被看成一個輸入管道,OutputStream被看成一個輸出管道,數(shù)據(jù)通過InputStream從源設(shè)備輸入到程序,通過OutputStream從程序輸出到目標設(shè)備,從而實現(xiàn)數(shù)據(jù)的傳輸。由此可見,I/O流中的輸入/輸出都是相對于程序而言的。
在JDK中,InputStream和 OutputStream提供了一系列與讀寫數(shù)據(jù)相關(guān)的方法,接下來先來了解一下InputStream的常用方法,如表1所示。
表1 InputStream的常用方法
方法聲明 | 功能描述 |
---|---|
int read() | 從輸入流讀取一個8位的字節(jié),把它轉(zhuǎn)換為0~255之間的整數(shù),并返回這一整數(shù)。當沒有可用字節(jié)時,將返回-1 |
int read(byte[] b) | 從輸入流讀取若干字節(jié),把它們保存到參數(shù)b指定的字節(jié)數(shù)組中,返回的整數(shù)表示讀取字節(jié)的數(shù)目 |
int read(byte[] b,int off,int len) | 從輸入流讀取若干字節(jié),把它們保存到參數(shù)b指定的字節(jié)數(shù)組中,off指定字節(jié)數(shù)組開始保存數(shù)據(jù)的起始下標,len表示讀取的字節(jié)數(shù)目 |
void close() | 關(guān)閉此輸入流并釋放與該流關(guān)聯(lián)的所有系統(tǒng)資源 |
表7-1中列舉了InputStream的四個常用方法。前三個read()方法都是用來讀數(shù)據(jù)的,其中,第一個read()方法是從輸入流中逐個讀入字節(jié),而第二個和第三個read()方法則將若干字節(jié)以字節(jié)數(shù)組的形式一次性讀入,從而提高讀數(shù)據(jù)的效率。在進行I/O流操作時,當前I/O流會占用一定的內(nèi)存,由于系統(tǒng)資源寶貴,因此,在I/O操作結(jié)束后,應該調(diào)用close()方法關(guān)閉流,從而釋放當前I/O流所占的系統(tǒng)資源。
與InputStream對應的是OutputStream。OutputStream是用于寫數(shù)據(jù)的,因此OutputStream提供了一些與寫數(shù)據(jù)有關(guān)的方法,如表2所示。
表2 OutputStream的常用方法
方法聲明 | 功能描述 |
---|---|
void write(int b) | 向輸出流寫入一個字節(jié) |
void write(byte[] b) | 把參數(shù)b指定的字節(jié)數(shù)組的所有字節(jié)寫到輸出流 |
void write(byte[] b,int off,int len) | 將指定byte數(shù)組中從偏移量off開始的len個字節(jié)寫入輸出流 |
void flush() | 刷新此輸出流并強制寫出所有緩沖的輸出字節(jié) |
void close() | 關(guān)閉此輸出流并釋放與此流相關(guān)的所有系統(tǒng)資源 |
InputStream和OutputStream這兩個類雖然提供了一系列和讀寫數(shù)據(jù)有關(guān)的方法,但是這兩個類是抽象類,不能被實例化,因此,針對不同的功能,InputStream和OutputStream提供了不同的子類,這些子類形成了一個體系結(jié)構(gòu),如圖2和圖3所示。
圖2 InputStream的子類
圖3 OutputStream的子類
從圖2和圖3中可以看出,InputStream和OutputStream的子類有很多是大致對應的,比如,ByteArrayInputStream和ByteArrayOutputStream、FileInputStream和FileOutputStream等。圖中所列出的I/O流都是程序中很常見的,接下來將為讀者講解開發(fā)時常用流的具體用法。
猜你喜歡: