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

Java IO 流家族全圖鑑:從位元組到字元,裝飾者模式實戰

     編輯:Java 綜合教學

核心抽象:四大基類

Java IO 採用裝飾者模式,以四大抽象類為核心:

  • InputStream / OutputStream:位元組流(單位:byte),處理二進位資料(圖片、聲音、序列化物件)。
  • Reader / Writer:字元流(單位:char,2 位元組),處理 Unicode 文字,自動處理編碼轉換。

關鍵方法:

  • InputStream.read():讀取單一位元組,回傳 int(-1 表結束)。
  • OutputStream.write(int b):寫入單一位元組。
  • Reader.read() / Writer.write(int c):對應字元版本。
  • close():釋放資源,輸出流會自動 flush()。
  • flush():強制清空緩衝區。

流家族分層

1. 節點流(直接操作資料源)

類型位元組流字元流典型資料源
檔案FileInputStream / FileOutputStreamFileReader / FileWriter本地檔案
記憶體ByteArrayInputStream / ByteArrayOutputStreamCharArrayReader / CharArrayWriter位元組/字元陣列
管道PipedInputStream / PipedOutputStreamPipedReader / PipedWriter執行緒間通訊
網路Socket.getInputStream() / getOutputStream()-網路連線

2. 處理流(包裝節點流,增強功能)

  • 緩衝:BufferedInputStream / BufferedReader — 提升讀寫效率,支援 readLine()。
  • 資料型別:DataInputStream / DataOutputStream — 以二進位讀寫基本型別(readInt()、writeDouble() 等)。
  • 物件序列化:ObjectInputStream / ObjectOutputStream — 讀寫實作 Serializable 的物件。
  • 轉換:InputStreamReader / OutputStreamWriter — 位元組流轉字元流的橋樑,指定編碼(UTF-8、GBK 等)。
  • 列印:PrintStream / PrintWriter — 格式化輸出,不拋 IOException。
  • 壓縮:GZIPInputStream / ZipInputStream 等。

裝飾者模式實戰:層層包裝

需求:從檔案讀取數值,並加入緩衝。

// 1. 節點流
FileInputStream fis = new FileInputStream("data.dat");
// 2. 包裝資料流
DataInputStream dis = new DataInputStream(fis);
// 3. 再包裝緩衝流
BufferedInputStream bis = new BufferedInputStream(dis);
// 使用
double d = dis.readDouble();

每一層持有下一層的參考,read() 呼叫鏈向下傳遞,職責單一、靈活組合。

最佳實踐建議

  1. 文字處理優先用 Reader/Writer,避免手動處理編碼。
  2. 務必使用 try-with-resources 自動關閉流(Java 7+)。
  3. 大量資料讀寫加入緩衝流。
  4. 序列化物件需注意 serialVersionUID 與版本相容。
  5. 網路/檔案流操作時處理 InterruptedIOException 支援中斷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved