閱讀68 返回首頁    go 微軟 go windows


Java IO: OutputStream

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()方法例子:

01 OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");
02  
03 while(hasMoreData()) {
04  
05     int data = getMoreData();
06  
07     output.write(data);
08  
09 }
10  
11 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()的例子:

01 OutputStream output = null;
02  
03 try{
04  
05     output = new FileOutputStream("c:\\data\\output-text.txt");
06  
07     while(hasMoreData()) {
08  
09         int data = getMoreData();
10  
11         output.write(data);
12  
13     }
14  
15 finally {
16  
17     if(output != null) {
18  
19         output.close();
20  
21     }
22  
23 }

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

最後更新:2017-05-23 12:31:46

  上一篇:go  Java IO: FileInputStream
  下一篇:go  《Java特種兵》5.2 線程安全(二)