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

Java 標準數據流體系詳解:System.in/out/err 與 java.io 包層次結構

     編輯:Java 相關知識

標準數據流三大支柱

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 捕獲。

java.io 包核心流層次結構

字節流體系(以字節為基本單位)

  • InputStream:字節輸入流超類。子類必須提供「返回下一個輸入字節」方法。
    直接子類:AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream。
  • OutputStream:字節輸出流超類。子類必須提供「寫入一個輸出字節」方法。
    直接子類:ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream, PipedOutputStream。

字符流體系(以字符為基本單位,處理編碼轉換)

  • Reader:字符輸入抽象類。子類必須實現 read(char[], int, int) 與 close()。
    直接子類:BufferedReader, CharArrayReader, FilterReader, InputStreamReader, PipedReader, StringReader。
  • Writer:字符輸出抽象類。子類必須實現 write(char[], int, int)、flush()、close()。
    直接子類:BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter。

關鍵橋樑:InputStreamReader / OutputStreamWriter

  • 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 文本。

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