68
微軟
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" );
|
03 |
while (hasMoreData()) {
|
05 |
int data = getMoreData();
|
這個例子首先創建了待寫入的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 ;
|
05 |
output = new FileOutputStream( "c:\\data\\output-text.txt" );
|
07 |
while (hasMoreData()) {
|
09 |
int data = getMoreData();
|
這個例子在finally塊中調用close()方法。雖然這種方式可以確保OutputStream關閉,但卻不是一個完美的異常處理方案。我在Java IO異常處理這文章中更加詳細地探討了IO的異常處理。
最後更新:2017-05-23 12:31:46