14. Java IO: OutputStream

想要查看此教程的目錄請點擊:Java IO教程目錄貼地址


Java IO API中,OutputStream是所有輸出流的基類。子類包括BufferedOutputStream,F(xiàn)ileOutputStream等等。想要了解所有的流相關的清單,請看“Java IO Overview”章節(jié)

OutputStream介紹和數(shù)據(jù)目的地

OutputStream經(jīng)常用來連接到數(shù)據(jù)目的地,比如文件,網(wǎng)絡連接,管道等等。OutputStream將所有數(shù)據(jù)的數(shù)據(jù)寫入目的地后即結束。

write(byte)

write(byte)方法用來向流中寫入單個字節(jié)。參數(shù)為int類型,也就是準備寫出的數(shù)據(jù)。只有int值的第一個字節(jié)會被寫入。其余的都會被忽略。

OutputStream的子類可以有更多write()方法。例如,DataOutputStream可以寫java基礎類型如int,long,float,double,boolean等。相對應的方法writeBoolean(),writeDouble()等

下面是OutputStream的write()例子:

OutputStream output = new FileOutputStream("c:\\data\\output-text.txt");

while(hasMoreData()) {
  int data = getMoreData();
  output.write(data);
}
output.close();

這個例子首先創(chuàng)建了一個FileOutputStream去獲取要讀的數(shù)據(jù)文件。然后進入一個循環(huán),循環(huán)的條件是有數(shù)據(jù),這只是一個偽代碼,并沒有去展示怎么確定有數(shù)據(jù)。

在循環(huán)里,調用了方法getMoreData()去獲取下一次要往OutputStream寫的數(shù)據(jù),然后寫入數(shù)據(jù)。

write(byte[])

OutputStream也有write(byte[] bytes)方法和write(byte[] bytes, int offset, int length)方法,這兩個都是寫入一個或部分數(shù)組內的字節(jié)到OutputStream。

write(byte[] bytes)方法是將數(shù)組內所有數(shù)據(jù)寫入到OutputStream。而write(byte[] bytes, int offset, int length)可以規(guī)定從哪里開始寫,一共寫多少長度的數(shù)據(jù)。

flush()

OutputStream的flush()方法刷新所有已經(jīng)寫入OutputStream的數(shù)據(jù)到數(shù)據(jù)目的地。例如,如果OutputStream是一個FileOutputStream的話,寫入FileOutputStream的的字節(jié)可能并沒有全部被寫入到磁盤,他們可能在內存緩沖區(qū)里,雖然你的Java代碼已經(jīng)將數(shù)據(jù)寫入到FileOutputStream,但是通過flush()方法,你可以確保數(shù)據(jù)都已經(jīng)寫到磁盤(網(wǎng)絡連接或其他的數(shù)據(jù)目標地)

close()

當你往OutputStream寫完數(shù)據(jù)的時候你會去關閉掉流,那么就要利用close()方法。由于OutputStream各式的寫入方法可能會拋出IOException,那么你就要在finally代碼塊中來關閉流。下面是一個關閉流的例子:

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()方法,確保流被關閉。但是它依然沒有完美解決異常問題。但是我已經(jīng)在“Java IO異常處理”章節(jié)說明了這個問題的解決辦法。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 一、流的概念和作用。 流是一種有順序的,有起點和終點的字節(jié)集合,是對數(shù)據(jù)傳輸?shù)目偝苫虺橄蟆<磾?shù)據(jù)在兩設備之間的傳輸...
    布魯斯不吐絲閱讀 10,319評論 2 95
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,734評論 18 399
  • 參考博文: 多態(tài)?? 多態(tài)就是父類指針指向子類對象 例如: 自定義按鈕的時候想改變按鈕內部的圖片和文字的位置,這個時...
    Dayu大魚閱讀 164評論 0 0
  • 今天終于恢復平時的運動練習了,不容易,這是一場心靈的對抗賽,心里就是兩個小人一直掐架。 懶惰小人說:“休息,休息一...
    如恒閱讀 251評論 0 0
  • 汪溝小子閱讀 300評論 0 3

友情鏈接更多精彩內容