Java IO: OutputStream

喝水會長肉 發表於 2021-11-27
Java

OutputStream類是Java IO API中所有輸出流的基類。子類包括BufferedOutputStream,FileOutputStream等等。參考Java IO概述這一小節底部的表格,可以瀏覽完整的子類的列表。

輸出流和目標媒介

輸出流往往和某些資料的目標媒介相關聯,比如檔案,網路連線,管道等。更多細節請參考Java IO概述。當寫入到輸出流的資料逐漸輸出完畢時,目標媒介是所有資料的歸屬地。

Write(byte)

write(byte)方法用於把單個位元組寫入到輸出流中。OutputStream的write(byte)方法將一個包含了待寫入資料的int變數作為引數進行寫入。只有int型別的第一個位元組會被寫入,其餘位會被忽略。(譯者注:寫入低8位,忽略高24位)。

OutputStream的子類可能會包含write()方法的替代方法。比如,DataOutputStream允許你利用writeBoolean(),writeDouble()等方法將基本型別int,long,float,double,boolean等變數寫入。

這是一個OutputStream的write()方法例子:

OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");while(hasMoreData()) {
    int data = getMoreData();
    output.write(data);}output.close();

這個例子首先建立了待寫入的FileOutputStream。在進入while迴圈之後,迴圈的判斷條件是hasMoreData()方法的返回值。hasMoreData()方法的實現不予展示,請把這個函式理解為:當有剩餘可寫資料時,返回true,否則返回false。

請注意,為了清晰,這裡忽略了必要的異常處理。想了解更多異常處理的資訊,請參考Java IO異常處理。

write(byte[])

OutputStream同樣包含了將位元組資料中全部或者部分資料寫入到輸出流中的方法,分別是write(byte[])和write(byte[], int offset, int length)。

write(byte[])把位元組陣列中所有資料寫入到輸出流中。

write(byte[], int offset, int length)把位元組資料中從offset位置開始,length個位元組的資料寫入到輸出流。

flush()

OutputStream的flush()方法將所有寫入到OutputStream的資料沖刷到相應的目標媒介中。比如,如果輸出流是FileOutputStream,那麼寫入到其中的資料可能並沒有真正寫入到磁碟中。即使所有資料都寫入到了FileOutputStream,這些資料還是有可能保留在記憶體的緩衝區中。通過呼叫flush()方法,可以把緩衝區內的資料重新整理到磁碟(或者網路,以及其他任何形式的目標媒介)中。

close()

當你結束資料寫入時,需要關閉OutputStream。通過呼叫close()可以達到這一點。因為OutputStream的各種write()方法可能會丟擲IO異常,所以你需要把呼叫close()的關閉操作方在finally塊中執行。這是一個OutputStream呼叫close()的例子:

//java學習交流:737251827  進入可領取學習資源及對十年開發經驗大佬提問,免費解答!
OutputStream output = null;try{
    output = new FileOutputStream("c:\\data\\output-text.txt"); 
    while(hasMoreData()) { 
        int data = getMoreData();
 
        output.write(data); 
    }
 } finally {
    if(output != null) {
        output.close();
 
    }}

這個例子在finally塊中呼叫close()方法。雖然這種方式可以確保OutputStream關閉,但卻不是一個完美的異常處理方案。我在Java IO異常處理這文章中更加詳細地探討了IO的異常處理。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010294/viewspace-2844438/,如需轉載,請註明出處,否則將追究法律責任。