本文展示最基礎的 Java 程式:從標準輸入(鍵盤)讀取位元組,直接寫入標準輸出(螢幕),形成簡單的回聲迴圈。雖然實務極少直接使用位元組流處理文字互動,但理解此機制是掌握 Java I/O 體系的基石。
import java.io.*;
public class ReadWrite {
public static void main(String[] args) {
byte[] buffer = new byte[1024];
try {
while (true) {
// 從標準輸入讀取位元組
int bytesRead = System.in.read(buffer);
if (bytesRead == -1) break; // EOF (Ctrl+D / Ctrl+Z)
// 寫入標準輸出
System.out.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
System.err.println("I/O 錯誤: " + e.getMessage());
System.exit(1);
}
}
}
javac ReadWrite.java
java ReadWrite
# 輸入任意文字,按 Enter 即時回顯
# Linux/Mac: Ctrl+D 結束 | Windows: Ctrl+Z 後按 Enter 結束
| 物件 | 型別 | 說明 |
|---|---|---|
System.in | InputStream | 標準輸入位元組流(通常連接鍵盤) |
System.out | PrintStream (extends OutputStream) | 標準輸出位元組流(通常連接螢幕) |
System.err | PrintStream | 標準錯誤輸出位元組流 |
System.in.read(byte[]):阻塞直到有資料或 EOF,回傳實際讀取位元組數System.out.write(byte[], off, len):直接輸出原始位元組,**不自動轉換編碼、不自動換行**Ctrl+D (Unix) / Ctrl+Z (Windows) 發送 EOF 信號,read() 回傳 -1import java.io.*;
import java.nio.charset.StandardCharsets;
public class ReadWriteModern {
public static void main(String[] args) throws IOException {
try (BufferedReader br = new BufferedReader(
new InputStreamReader(System.in, StandardCharsets.UTF_8));
BufferedWriter bw = new BufferedWriter(
new OutputStreamWriter(System.out, StandardCharsets.UTF_8))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine(); // 跨平台換行
bw.flush(); // 即時輸出
}
}
}
}
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("請輸入姓名: ");
String name = sc.nextLine();
System.out.println("你好, " + name + "!");
sc.close();
}
}
System.in/System.out 位元組流是 Java I/O 體系的根基。理解其阻塞特性、位元組語意、EOF 處理,對進階學習 NIO、序列化、網路程式設計至關重要。實務文字處理請務必使用字元流(Reader/Writer)+ 指定編碼(UTF-8)+ 緩衝(BufferedReader/Writer)。