Java 標準數據流指字符模式下(如 DOS)程序與系統交互的三種預定義流:
| 流 | 類型 | 描述 | 典型對應 |
|---|---|---|---|
System.in | 標準輸入流 | 已打開,提供輸入數據。通常對應鍵盤輸入或主機環境/用戶指定的輸入源。 | 鍵盤 |
System.out | 標準輸出流 | 已打開,接受輸出數據。通常對應顯示器輸出或指定輸出目標。 | 顯示器/控制台 |
System.err | 標準錯誤輸出流 | 已打開,接受輸出數據。慣例用於顯示錯誤信息、或需立即引起注意的信息(即使 out 已重定向到文件)。 | 顯示器/控制台(可獨立重定向) |
從 System.in 讀取一行字符存入緩衝區,輸出字節數、整數值與字符值:
package biz.onecn.stream;
import java.io.IOException;
public class Input {
public static void main(String[] args) {
System.out.println("請輸入:");
byte[] buffer = new byte[512];
int count;
try {
count = System.in.read(buffer); // 讀取標準輸入
System.out.println("實際讀入字節數: " + count);
System.out.println("輸出結果:");
// 直接輸出字節值
for (int i = 0; i < count; i++) {
System.out.print(buffer[i] + " ");
}
System.out.println();
// 以字符方式輸出
for (int i = 0; i < count; i++) {
System.out.print((char) buffer[i]);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
read() 在 java.io 中,拋 IOException,用 try-catch 捕獲。
AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream。ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, PipedOutputStream。read(char[], int, int) 與 close()。BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader。write(char[], int, int)、flush()、close()。BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter。InputStreamReader:字節輸入流 → 字符輸入流(解碼,指定 charset)。OutputStreamWriter:字符輸出流 → 字節輸出流(編碼,指定 charset)。這兩個類是字節流與字符流體系互通的關鍵適配器。
FilterInputStream/FilterOutputStream、FilterReader/FilterWriter 及其子類(BufferedInputStream、BufferedReader、DataInputStream、PrintWriter 等)採用裝飾器模式,動態為基礎流增加功能(緩衝、數據類型讀寫、格式化輸出等)。
掌握 System.in/out/err 三大標準流與 java.io 雙體系(字節/字符)層次結構,是 Java I/O 編程的基石。實際開發中常用組合:new BufferedReader(new InputStreamReader(System.in)) 讀取控制台行文本,new PrintWriter(new OutputStreamWriter(System.out, "UTF-8"), true) 寫入帶自動刷新的 UTF-8 文本。