核心分類
| 維度 | 字節流 | 字符流 |
| 處理單元 | 1 Byte | 2 Bytes (Unicode char) |
| 基類 | InputStream / OutputStream | Reader / Writer |
| 典型子類 | FileInputStream, ByteArrayInputStream... | FileReader, CharArrayReader... |
| 適用場景 | 二進制、非文本、不確定編碼 | 純文本(含中文)、已知編碼 |
| 效率 | 單字節操作 | 緩衝區批量操作,更高 |
字節流詳細體系
InputStream 族系
ByteArrayInputStream:內存 byte[] 作為輸入源
StringBufferInputStream:已棄用,無法正確轉換字符,改用 StringReader
FileInputStream:文件讀取,三種構造器(File/FileDescriptor/String 路徑)
PipedInputStream:線程間管道通信(接收端),配合 PipedOutputStream
SequenceInputStream:合併多個 InputStream 為一個(Enumeration 或雙參構造)
OutputStream 族系
ByteArrayOutputStream:內存緩衝區自動擴容,toByteArray()/toString() 取數據
FileOutputStream:文件寫入,支持追加模式
PipedOutputStream:管道發送端
字符流詳細體系
Reader 族系
CharArrayReader:char[] 源
StringReader:String 源
FileReader:文件字符讀取(默認編碼)
PipedReader:管道字符接收
Writer 族系
CharArrayWriter、StringWriter、FileWriter、PipedWriter —— 分別對應上述 Reader
雙向轉換橋樑
InputStreamReader:字節流 → 字符流(指定編碼),建議外層包 BufferedReader 提升效率
OutputStreamWriter:字符流 → 字節流(指定編碼),內含 CharToByteConverter
鍵盤輸入整數示例
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
int n = Integer.parseInt(s);
Java IO 選型決策樹(六步法)
- 數據格式:二進制 → Stream 系;文本 → Reader/Writer 系
- 方向:輸入 → InputStream/Reader;輸出 → OutputStream/Writer
- 是否需轉換:Stream ↔ Reader/Writer 用 InputStreamReader/OutputStreamWriter
- 數據源/去向:文件/byte[]/char[]/String/網絡/管道 → 選對應具體類
- 是否緩衝:高頻讀寫必加 BufferedInputStream/BufferedReader 等
- 是否格式化輸出:需格式化用 PrintStream/PrintWriter
特殊需求類
- 對象序列化:
ObjectInputStream/ObjectOutputStream
- 進程間通信:Pipe 系列
- 合併輸入:
SequenceInputStream
- 回退/行號:
PushbackInputStream/LineNumberReader