IO 流處理設備間數據傳輸。Java 以「流」為抽象,java.io 包提供各類流類。按數據單位分:字節流(處理二進制數據:圖片、視頻、所有文件)與字符流(處理文本,本質是字節流經編碼轉換)。按流向分:輸入流(讀)、輸出流(寫)。按角色分:節點流(直接操作目標設備,如 FileInputStream)、處理流(包裝節點流提供增強功能,如 BufferedInputStream)。
| 基類 | 類型 | 核心方法 |
|---|---|---|
| InputStream | 字節輸入 | read()、read(byte[])、close() |
| OutputStream | 字節輸出 | write(int)、write(byte[])、flush()、close() |
| Reader | 字符輸入 | read()、read(char[])、close() |
| Writer | 字符輸出 | write(int/char[]/String)、flush()、close() |
FileInputStream fis = new FileInputStream("a.gif");
FileOutputStream fos = new FileOutputStream("b.gif");
byte[] buf = new byte[50];
while (fis.read(buf) != -1) fos.write(buf);
fis.close(); fos.close();
FileReader fr = new FileReader("yoyo.txt");
FileWriter fw = new FileWriter("yoyo1.txt");
char[] buf = new char[40];
int len;
while ((len = fr.read(buf)) != -1) fw.write(buf, 0, len);
fr.close(); fw.close();
內部維護緩衝區(默認 8KB),減少系統調用次數。
// 字節緩衡流複製大文件
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("reread.wmv"), 1000000);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("newmovie.wmv"), 1000000);
byte[] buf = new byte[100000];
while (bis.read(buf) != -1) bos.write(buf);
bis.close(); bos.close();
字符緩衝流關鍵方法:
BufferedReader.readLine() 讀一行(不含換行符)
BufferedWriter 無寫行方法,需配合 PrintWriter.println() 或手動寫換行符並 flush()。
InputStreamReader:字節流 → 字符流(指定編碼)。OutputStreamWriter:字符流 → 字節流(指定編碼)。常用組合:new BufferedReader(new InputStreamReader(System.in))(鍵盤輸入);new PrintWriter(new OutputStreamWriter(System.out))(格式化輸出)。
read() 返回 int 而非 byte?write(int) 只保留低 8 位?歡迎在評論區交流探討!
