| 功能 | 1.0 字節流 | 1.1 字符流 |
| 文件 | FileInputStream / FileOutputStream | FileReader / FileWriter |
| 內存數組 | ByteArrayInputStream / ByteArrayOutputStream | CharArrayReader / CharArrayWriter |
| 字符串 | StringBufferInputStream (棄用) | StringReader / StringWriter |
| 管道 | PipedInputStream / PipedOutputStream | PipedReader / PipedWriter |
| 緩衝裝飾 | BufferedInputStream / BufferedOutputStream | BufferedReader / BufferedWriter |
| 數據類型 | DataInputStream / DataOutputStream | — (字符流不直接支援基本類型) |
裝飾器模式實現
兩套體系均採用 Decorator 模式動態組合功能:
// 1.0 字節流鏈
InputStream in = new BufferedInputStream(new FileInputStream("a.txt"));
// 1.1 字符流鏈
Reader reader = new BufferedReader(new FileReader("a.txt"));
橋接轉換類
InputStreamReader:字節流 → 字符流(指定編碼)
OutputStreamWriter:字符流 → 字節流(指定編碼)
Reader r = new InputStreamReader(new FileInputStream("a.txt"), "UTF-8");
Writer w = new OutputStreamWriter(new FileOutputStream("b.txt"), "UTF-8");
實戰選型建議
- 文本文件:優先
Reader/Writer + 指定編碼
- 二進制文件(圖片、視頻、序列化對象):
InputStream/OutputStream
- 高性能讀寫:
Buffered* 必加,大文件考慮 FileChannel + MappedByteBuffer
- 網絡通信:協議層通常處理字節,應用層按需轉字符
代碼示例:帶緩衝文件寫入
try (OutputStream out = new BufferedOutputStream(new FileOutputStream("d:/123.txt"))) {
String str = "hello skywang!";
for (byte b : str.getBytes(StandardCharsets.UTF_8)) out.write(b);
}
- 上一篇文章: Java 移位運算符完全指南:<<、>>、>>> 原理與實戰技巧
- 下一篇文章: Java Map 遍歷四種方式完整對比與性能分析
Copyright ©
程式碼之家 All Rights Reserved