天天看點

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.1.1 讀寫位元組

InputStream類有一個抽象方法:

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.1.1 讀寫位元組

這個方法将讀入一個位元組,并傳回讀入的位元組,或者在遇到輸入源結尾時傳回-1。在設計具體的輸入流類時,必須覆寫這個方法以提供适用的功能,例如,在FileInputStream類中,這個方法将從某個檔案中讀入一個位元組,而System.in(它是InputStream的一個子類的預定義對象)卻是從“标準輸入”中讀入資訊,即控制台或重定向的檔案。

InputStream類還有若幹個非抽象的方法,它們可以讀入一個位元組數組,或者跳過大量的位元組。這些方法都要調用抽象的read方法,是以,各個子類都隻需覆寫這一個方法。

與此類似,OutputStream類定義了下面的抽象方法:

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.1.1 讀寫位元組

它可以向某個輸出位置寫出一個位元組。

read和write方法在執行時都将阻塞,直至位元組确實被讀入或寫出。這就意味着如果流不能被立即通路(通常是因為網絡連接配接忙),那麼目前的線程将被阻塞。這使得在這兩個方法等待指定的流變為可用的這段時間裡,其他的線程就有機會去執行有用的工作。

available方法使我們可以去檢查目前可讀入的位元組數量,這意味着像下面這樣的代碼片段就不可能被阻塞:

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.1.1 讀寫位元組

當你完成對輸入/輸出流的讀寫時,應該通過調用close方法來關閉它,這個調用會釋放掉十分有限的作業系統資源。如果一個應用程式打開了過多的輸入/輸出流而沒有關閉,那麼系統資源将被耗盡。關閉一個輸出流的同時還會沖刷用于該輸出流的緩沖區:所有被臨時置于緩沖區中,以便用更大的包的形式傳遞的位元組在關閉輸出流時都将被送出。特别是,如果不關閉檔案,那麼寫出位元組的最後一個包可能将永遠也得不到傳遞。當然,我們還可以用f?lush方法來人為地沖刷這些輸出。

即使某個輸入/輸出流類提供了使用原生的read和write功能的某些具體方法,應用系統的程式員還是很少使用它們,因為大家感興趣的資料可能包含數字、字元串和對象,而不是原生位元組。

我們可以使用衆多的從基本的InputStream和OutputStream類導出的某個輸入/輸出類,而不隻是直接使用位元組。

java.io.InputStream 1.0

《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.1.1 讀寫位元組
《Java核心技術 卷Ⅱ 進階特性(原書第10版)》一2.1.1 讀寫位元組