教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

IO流、字節(jié)流和字符流詳細介紹

更新時間:2020年07月24日15時40分 來源:傳智播客 瀏覽次數:

  一:IO流的分類

  1)按流向分:

  輸入流:讀取數據,把持久設備的數據讀取到內存中。

  輸出流:寫出數據,把內存的數據寫出到持久設備。

  2)按數據類型分:

  計算機中一切數據都是:字節(jié)數據。

  字符數據:底層還是字節(jié)數據,但是可以根據某些規(guī)則,把字節(jié)變成人們認識的文字、符號等等。

  字節(jié)流:數據在持久設備上都是以二進制形式保存的。二進制就是字節(jié)數據。Java就給出了字節(jié)流可以直接操作字節(jié)數據。

  字節(jié)輸入流:InputStream

  子類:FileInputStream

  字節(jié)輸出流:OutputStream

  子類:FileOutputStream

  字符流:讀取字符數據。數據在設備上是以二進制形式表示,但是有些二進制合并在一起可以表示一些字符數據。

  字符輸入流:Reader

  子類:FileReader

  字符輸出流:Writer

  子類:FileWriter

  注意:

  1)字節(jié)流可以對任意類型的文件按照字節(jié)進行讀和寫的操作;例如:圖片、視頻、文本文件、word文檔、mp3等。

  2)字符流只能對文本類型的文件進行操作;例如:.java文件、.txt等文件。

  二:字節(jié)流

  1)字節(jié)輸出流 OutputStream

  public void close() :關閉此輸出流并釋放與此流相關聯的任何系統(tǒng)資源。

  public void write(byte[] byte):把這個byte字節(jié)數組中的所有數據寫到關聯的設備中(設備包括文件、網絡或者其他任何地方)。

  public void write(byte[] b, int off, int len) :把b字節(jié)中的數據從下標off位置開始往出寫,共計寫len個。

  public abstract void write(int b) : 把這個b數據寫到關聯的設備中。

  注意:close方法,當完成流的操作時,必須調用此方法,釋放系統(tǒng)資源。

  2)字節(jié)輸入流 InputStream

  public void close() :關閉此輸入流并釋放與此流相關聯的任何系統(tǒng)資源。

  public abstract int read(): 調用一次read,就可以從關聯的文件中讀取一個字節(jié)數據,并返回這個字節(jié)數據。方法可以從關聯的文件中讀取數據。所有read方法如果讀取到文件的末尾,都會返回-1。遇到-1就代表文件中的數據已經被讀取完畢。

  public int read(byte[] byte):調用一次,讀取多個字節(jié)數據,把讀到的字節(jié)數據保存在傳遞的byte字節(jié)數組中。返回字節(jié)數組中讀取的字節(jié)個數。注意:這個返回值不是數組長度。

  注意:close方法,當完成流的操作時,必須調用此方法,釋放系統(tǒng)資源。

  三:字符流

  1)字符輸入流 Reader

  public void close() :關閉此流并釋放與此流相關聯的任何系統(tǒng)資源。

  public int read(): 調用一次讀取一個字符,返回字符的編碼值。即讀取的內容存放到返回值中。如果讀取到文件末尾返回-1;

  public int read(char[] chs):調用一次讀取多個字符,把這些字符保存在chs中,返回給字符數組中存儲的字符個數,如果讀取到文件末尾返回-1;

  注意:雖然讀取了一個字符,但是會自動提升為int類型。

  2)字符輸出流 Writer

  public abstract void close() :關閉此輸出流并釋放與此流相關聯的任何系統(tǒng)資源。

  public abstract void flush() :刷新此輸出流并強制任何緩沖的輸出字符被寫出。

  public void write(int b) :寫出一個字符。

  public void write(char[] chs):將字符從指定的字符數組寫出此輸出流。

  public abstract void write(char[] b, int off, int len) :從指定的字符數組寫出 len字符,從偏移量 off開始輸出到此輸出流。

  public void write(String str) :寫出一個字符串。

  說明:字符輸入和字符輸出流都是自帶緩沖區(qū)的。緩沖區(qū)就是在類的底層封裝了一個數組,如果我們使用字符輸出流向目的地文件中寫數據的時候,數據不會立刻寫到目的地文件中,而是寫到自帶的數組中,數據還在內存中,所以我們必須調用FileWriter類中的刷新方法flush將數組中的數據刷新到目的地硬盤文件中。

  注意:

  1. 雖然參數為int類型四個字節(jié),但是只會保留一個字符的信息寫出。

  2. 未調用close方法,數據只是保存到了緩沖區(qū),并未寫出到文件中。


猜你喜歡:

傳智播客java高級軟件工程師課程

敏捷開發(fā)流程圖和敏捷開發(fā)十二原則 

什么是動態(tài)代理?兩種常用的動態(tài)代理方式 

0 分享到:
和我們在線交談!