Io流階段大總結

趕星而至發表於2021-01-02

              位元組流結構

 輸入流:

ObjectInputStream:從檔案中讀取物件

FileInputStream:從檔案中輸入(讀)位元組

BufferedInputStream:底層有緩衝陣列,在不定義陣列的情況下,提高輸入(讀)效率

 

輸出流:

ObjectOutStream:

經一個物件寫入檔案

FileOutputStream:

將資料輸出(寫)檔案

BufferedOutputStream:

底層有緩衝陣列,再不定義陣列情況下,提高輸出(寫)效率

             字元流結構圖

 

輸入流:

FileReader:

輸入(讀)文字檔案的資料

BuffereReader:

底層有緩衝陣列,在不定義陣列情況下,提高輸入(讀)效率,同時有特有readLine()方法,一次可以讀取一整行資料

InputStreamReader:

是從位元組流到字元流的橋樑:它讀取位元組,並使用指定的charset將其解碼為字元.它使用的字符集可以有名

稱指定,也可以被明確指定,或者使用平臺的預設字符集

 

輸出流:

FileWriter:

將資料輸出(寫)到文字檔案

BufferedWriter:

底層有緩衝陣列,再不定義陣列的情況下,提高寫入效率.同時有特有newLine()方法輸出跨平臺換行

OutputStreaWriter:

是從字元流到位元組流的橋樑:使用指定的charset將其解碼為位元組,它使用的字符集可以是由名稱指定,

也可以被明確指定,或者可以接受平臺預設的字符集

              位元組流常用方法

 

FileInputStream,BufferedInputStream:

  • int read():讀取一個位元組

  • int read(byte[]b):讀取一個位元組陣列

  • void close:釋放檔案(關流)

FileOutputStream、BufferedOutputStream:

  • void write(int b):寫入一個位元組

  • void write(byte[]b):寫入一個位元組陣列

  • void write(byte[]b,int off(開始位置),int len(個數)):寫入一個位元組陣列,從off開始,寫入len個

  • void close:釋放檔案(關流)

ObjectInputStream:

  • Object readObject():讀取一個物件

  • void close:釋放檔案(關流)

ObjectOutputStream:

  • void writeObject(Object obj):寫入一個物件

  • void close:釋放檔案(關流)

               字元流常用方法

 

FileReader、BufferedReader、InputStreamReader:

  • int read():一次讀取一個字元

  • int read(char[]char):一次讀取一個字元陣列

BufferedReader特有方法:

  • String readLine():讀取一整行

FileWriter、BufferedWriter、OutputStreamWriter:

  • void write():寫入一個字元

  • void write(char[]char):寫入一個字元陣列

  • void write(char[]char,int off(開始位置),int len(個數)):寫入一個陣列的一部分,開始位置off,寫入個數len

  • void write(String str):寫一個字串

  • void write(String str,off(開始位置),len(個數)):寫一個字串一部分,開始位置off,寫入個數len

  • void flush():重新整理流

  • void close():釋放檔案

BufferedWriter特有方法:

  • void newLine:跨平臺通用換行

Properties集合與Io流集合的方法:

  • void load(Reaner reader):將字元輸入流中的資料載入到Properties物件中

  • void store(Writer writer,String comments):將Properties集合中的資料存入字元輸出流

              注意事項

 

  • flush():

  重新整理流,之後還可以繼續寫資料

  • close():

  關閉流,釋放資源,但是關閉之前會先寫出資料.一旦關閉,就不能再寫資料了

  • 關流操作應定要放在try-catch-finally中的finally中:

    • 被finally控制的語句一定會被執行,不管有沒有異常,也不管異常有沒有被捕獲

    • 即使finally中包含continue,break,return,try塊結束後,finally塊也依舊會執行

  • 使用位元組輸出流注意事項:

    • 如果檔案不存在就建立

    • 寫整數時,實際寫出的是整數對應碼錶的字母

    • 使用完必須釋放資源

    • 表示檔案的路徑名稱必須存在

  • 使用字元輸出(寫出)流注意事項:

    • 建立字元輸出流物件時如果檔案不存在就建立,存在就清空

    • 寫資料時:

      • 寫int就是寫的ASCLL碼錶中對應的位元組

      • 寫字串就是將字串原樣輸出

    • 必須釋放資源

  • 使用字元流(輸入)讀取資料注意事項:

    • 檔案必須要存在

    • 必須釋放資源

  • 物件操作流注意事項:

    • 如果想要這個類能被序列化,那麼這個類必須實現一個介面Serializable

    • Serializable是一個標記介面,實現給介面不需要重寫任何方法

    • 靜態成員不加transient關鍵字都會被序列化

    • serialVersionUID 指定序列號,可以避免javabean修改,造成序列號改變執行時候出錯

  • 資料讀取末尾的輸出標記:

    • 字元,位元組讀取到檔案結尾會返回-1

    • 讀取一整行到檔案末尾會返回null

    • 讀取物件到末尾會報EOFException

  • File[]listFiles()注意點:

    • File指向不存在的,返回null

    • 存在的是檔案:返回null

    • 存在的是資料夾正常輸出,如果是空資料夾,返回長度為0的File陣列

    • 許可權問題沒有訪問許可權,返回null

    注意:返回為null的情況,可以有效避免遍歷返回陣列時候出現執行時異常 

 

相關文章