2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁技術文章正文

IO流、字節流和字符流分別是什么?

更新時間:2020-07-24 來源:黑馬程序員 瀏覽量:

一:IO流的分類

  1)按流向分:

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

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

  2)按數據類型分:

  計算機中一切數據都是:字節數據。

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

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

  字節輸入流:InputStream

  子類:FileInputStream

  字節輸出流:OutputStream

  子類:FileOutputStream

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

  字符輸入流:Reader

  子類:FileReader

  字符輸出流:Writer

  子類:FileWriter

  注意:

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

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

二:字節流

  1)字節輸出流 OutputStream

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

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

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

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

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

  2)字節輸入流 InputStream

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

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

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

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

三:字符流

  1)字符輸入流 Reader

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

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

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

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

  2)字符輸出流 Writer

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

  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) :寫出一個字符串。

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

  注意:

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

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


猜你喜歡:
  
Java高級軟件工程師課程

  什么是敏捷開發?十分鐘了解 

  兩種常用的動態代理方式 



分享到:
在線咨詢 我要報名
和我們在線交談!