Java IO流

  1. 概述

    • IO流用來處理設備之間的數據傳輸 (上傳文件和下載文件)
    • java對數據的操做時經過流的方式
    • java用於操做流的對象都在IO包中
  2. IO流分類

    • 流向分:
      • 輸入流(把文本拿到控制檯, 讀取數據)     
      • 輸出流(把文本寫到文件中, 寫出數據)
    • 數據類型分:
      • 字節流
      • 字符流(1個字符等於兩個字節流,爲了方便操做文本數據,Java就提供了字符流)
      • 注:若是操做文本數據,就用字符流,其餘狀況就用字節流
  3. 四個基(抽象)類 InputStream OutputStream Reader Writer
  4. IO第一個案例 : 往一個文本文件中輸入一句話:hello io 採用 OutputStream
  5. 每種基類的子類都是以父類名做爲後綴名
  6. OutputStream 的子類FileOutputStream的構造方法
    1. FileOutputStream(File file)
    2. FileOutputStream(String name)
  7. 用FileOutputStream的對象先調用write而後調用close(爲何要有close,1.讓流對象關閉,2.通知系統釋放有關的資源) 共三步
  8. 字節流寫數據的方式有三個
    1. void write(int b) 一個字節
    2. void write(byte[] b) 字節數組
    3. void write(byte[] b, int off, int len) 字節數組的一部分
  9. 字節流寫數據常見問題
    1. 建立字節輸出流作了哪些事情?
      1. 系統建立文件 建立fileoutputstream對象 把對象指向文件 
    2. 數據寫成功後,爲何要close()?
      1. 讓對象變成垃圾 讓系統去釋放資源
    3. 如何實現數據的追加寫入
      1. FileOutputStream(File file, true)
      2. FileOutputStream(String name, true)
    4. 如何實現數據的換行?
      1. "\n"
  10. 字節流寫數據加入異常處理
    1. 分開作異常處理 三步三個try(可讀性差,通常不用)
    2. 一塊兒作

       

       

  11. FileInputStream 
    1. int read() 今後輸入流中讀取一個數據字節 (若到文件末尾則返回-1)
    2. int read(byte[] b) 今後輸入流中將最多b.length個字節的數據讀入到一個byte數組中  數組長度通常是1024或1024大的整數倍
      1. 返回值是實際讀取的字節個數
  12. 會了,讀寫文件,練習複製文件
    1. 兩個注意:數據源:從哪裏來 目的地:到哪裏去
    2. 在計算機中中文的存儲分兩個字節 第一個字節確定是負數,第二個字節可能有正數,可是沒影響
  13.  字節緩衝流
    1. 字節流一次讀寫一個數組的速度明顯比一次讀寫一個字節的速度快不少,這是加入了數組這樣的緩衝區效果,java自己在設計的時候,也考慮了這樣的設計思想(裝飾設計模式),因此提供了字節緩衝區流 ,這種類,也被稱爲緩衝區類(高效類) 包含 字節緩衝輸出流 BufferedOutputStream字節緩衝區輸入流 BufferedInputStream(2個構造)
  14. 構造方法能夠指定緩衝區大小,可是咱們通常用不上,由於默認的緩衝區大小就足夠了
  15. 爲何不傳遞一個具體的文件或者文件路徑,而是傳遞一個OutputStream對象呢?
    1. 由於字節緩衝區流僅僅提供緩衝區,爲高效而設計,可是真正的讀寫操做仍是得靠基本的流對象實現 (new BufferedOutputStream(OutputStream out))
  16. 讀對象:BufferedInputStream 用法跟FileInputStream同樣 read() 和read(char[] c)
  17. 寫對象:BufferedOutputStream write(char[] a) 
    字節流四種方式複製文件:
    * 基本字節流一次讀取一個字節
    * 基本字節流一次讀取一個字節數組
    * 高效字節流一次讀取一個字節
    * 高效字節流一次讀取一個字節數組
  18. 字符流

    1. 概述:因爲字節流操做中文不是特別方便,因此,java就提供了轉換流
    2. 字符流 = 字節流 + 編碼表
  19. 什麼叫編碼表
    1. ASCII碼錶 (美國標準信息交換碼) 一個字節的7個位(-128-127)表示一個字符 最高位爲符號位
    2. ISO-8859-1 拉丁碼錶 歐洲碼錶 8位表示一個數據 0-255
    3. gb2312 簡體中文
    4. gbk 加入更多中文文字符號
    5. gb18030 gbk的取代版本
    6. BIG-5碼 繁體碼錶
    7. Unicode 國際標準碼 兩個本身表示 java默認Unicode
    8. UTF -8 最多三個字節表示一個字符 能用一個就用一個 一個表示不了就用兩個 實在不行就用三個 能夠與 ASCII兼容
  20. 字符串中的編碼問題 
    1. String類的一個構造方法 String(byte[] bytes, String charsetName):經過指定的字符集解碼字節數組
    2. byte[] getBytes(String charsetName) 使用指定的字符集將string編碼爲byte序列
    3. 編碼: 把看的懂的變成看不懂的 解碼:相反
    4. 編碼問題簡單,只要編碼解碼的格式是一致的,就不會有問題
  21. IO的編解
    1. OutputStreamWriter(OutputStream out):字符流 把字節流轉換爲字符流
    1. 必須經過轉換流才能作
    2. OutputStreamWriter(OutputStream out, String charsetName):字符流 根據指定編碼把字節流轉換爲字符流
    3. InputStreamReader(InputStream is) (此處可讀取字符數組)
    4. InputStreamReader(InputStream is, String charsetName) 用指定字符編碼來讀取
  22. OutputStreamWriter 的write() 方法共五個重載
    1. void write(int c) 寫一個字符
    2. void write(char[] cbuf) 寫一個字符數組
    3. void write(char[] cbuf, int off, int len)
    4. void write(String str) 寫一個字符串
    5. void write(String str, int off, int len)
    6. 注意:字符流寫數據記得要 void flush() 一下
    7. 運行close() 方法時,默認先刷新一下
  23. close() 和 flush()的區別
    1. close()關閉流對象,可是要刷新一次緩衝區,關閉以後,流對象不能在寫數據了
    2. flush()僅僅刷新緩衝區,刷新後流對象還能繼續使用(只有在數據量很大的狀況下才須要flush())

       

相關文章
相關標籤/搜索