首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 標準輸入輸出基礎:鍵盤讀取與螢幕輸出迴圈

     編輯:Java 相關知識

Java 標準 I/O 最簡範例:System.in / System.out 位元組流迴圈

本文展示最基礎的 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 結束

核心 API 對照

物件型別說明
System.inInputStream標準輸入位元組流(通常連接鍵盤)
System.outPrintStream (extends OutputStream)標準輸出位元組流(通常連接螢幕)
System.errPrintStream標準錯誤輸出位元組流

關鍵行為解析

  1. System.in.read(byte[]):阻塞直到有資料或 EOF,回傳實際讀取位元組數
  2. System.out.write(byte[], off, len):直接輸出原始位元組,**不自動轉換編碼、不自動換行**
  3. 緩衝區大小 1024 為經驗值,實際讀取量取決於輸入資料長度
  4. Ctrl+D (Unix) / Ctrl+Z (Windows) 發送 EOF 信號,read() 回傳 -1

為何實務不直接用此寫法處理文字?

  • 編碼問題:位元組流不處理字元編碼,中文在 UTF-8 終端機下為多位元組,直接寫出無問題;但若終端機編碼不一致會產生亂碼
  • 行緩衝:終端機通常行緩衝,使用者按 Enter 後資料才送達程式
  • 無法逐行處理:位元組流無「讀取一行」概念

推薦的文字互動寫法(字元流 + 緩衝)

import 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();    // 即時輸出
            }
        }
    }
}

進階:Scanner 簡易互動

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)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved