Java輸入/輸出流體系中常用的流分類(表內容來自java瘋狂講義)
注:下表中帶下划線的是抽象類,不能創建對象。粗體部分是節點流,其他就是常用的處理流。
| 流分類 | 使用分類 | 字節輸入流 | 字節輸出流 | 字符輸入流 | 字符輸出流 |
| 抽象基類 | InputStream | OutputStream |
Reader | Writer | |
| 節點流 | 訪問文件 | FileInputStream | FileOutStream | FileReader | FileWriter |
| 訪問數值 | ByteArrayInputStream | ByteArrayOutStream | CharArrayReader | CharArrayWriter | |
| 訪問管道 | PipedInputStream | PipedOutStream | PipedReader | PipedWriter | |
| 訪問字符串 | StringReader | StringWriter | |||
| 處理流 | 緩沖流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
| 轉換流 | InputStreamReader | OutputStreamWriter | |||
| 對象流 | ObjectInputStream | ObjectOutputStream | |||
| 抽象基類(過濾) | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter | |
| 打印流 | PrintStream | PrintWriter | |||
| 推回輸入流 | PushbackInputStream | PushbackReader | |||
| 特殊流 | DataInputStream | DataOutputStream |
——————————————————————————————————————————————————————————————————
總結:
1.Java IO是采用的是裝飾模式,即采用處理流來包裝節點流的方式,來達到代碼通用性。
2.處理流和節點流的區分方法,節點流在新建時需要一個數據源(文件、網絡)作為參數,而處理流需要一個節點流作為參數。
3.處理流的作用就是提高代碼通用性,編寫代碼的便捷性,提高性能。
4.節點流都是對應抽象基類的實現類,它們都實現了抽象基類的基礎讀寫方法。其中read()方法如果返回-1,代表已經讀到數據源末尾。
