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

Java IO 緩衝流深度解析:BufferedInputStream/OutputStream、BufferedReader/Writer 四大核心實戰

     編輯:Java 綜合教學

Java IO 緩衝流深度解析:BufferedInputStream/OutputStream、BufferedReader/Writer 四大核心實戰

緩衝流是 IO 性能優化的第一把交椅。它本身不具備直接讀寫源/目的地的能力,而是包裝在節點流外層,在內存中劃分緩衝區(默認 8192 字節/字符),批量讀取、批量寫入,將系統調用次數降低數量級。本文詳細解析四大緩衝流實戰用法。

一、字節緩衝流

1. BufferedOutputStream —— 字節輸出緩衝

應用程序向緩衝區寫入字節,緩衝區滿或 flush()/close() 時一次性刷入底層流。

// 示例:高效寫入大量字節
FileOutputStream fos = new FileOutputStream("data.bin");
BufferedOutputStream bos = new BufferedOutputStream(fos, 16384); // 自定義緩衝區 16KB
for (int i = 0; i < 1000000; i++) {
    bos.write(i); // 單字節寫入極快,實際走內存緩衝
}
bos.flush(); // 強制刷新
bos.close(); // 關閉會自動 flush,並關閉底層 fos

2. BufferedInputStream —— 字節輸入緩衝

創建時分配內部緩衝數組,從底層流批量讀入緩衝區,後續 read() 直接從緩衝區取數據。

// 示例:高效讀取大文件
FileInputStream fis = new FileInputStream("bigfile.dat");
BufferedInputStream bis = new BufferedInputStream(fis, 16384);
byte[] buf = new byte[4096];
int len;
while ((len = bis.read(buf)) != -1) {
    // 處理數據
}
bis.close();

二、字符緩衝流(文本處理神器)

3. BufferedWriter —— 字符輸出緩衝

緩衝字符/字符串/數組,提供 newLine() 跨平台換行。

FileWriter fw = new FileWriter("log.txt", true);
BufferedWriter bw = new BufferedWriter(fw, 8192);
bw.write("第一行日誌");
bw.newLine(); // 自動根據系統換行符
bw.write("第二行日誌");
bw.flush();
bw.close();

4. BufferedReader —— 字符輸入緩衝(王者 API:readLine())

默認緩衝區 8192 字符。readLine() 讀取一行(不含換行符),返回 null 表示結束。讀取文本文件首選。

FileReader fr = new FileReader("config.properties");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
    System.out.println(line); // 處理每行
}
br.close();

三、核心區別速查

流處理單位核心 API適用場景flush/close 行為
BufferedOutputStreambytewrite(int/byte[])二進制高頻寫入flush() 刷緩衝;close() 刷緩衝+關底層
BufferedInputStreambyteread()/read(byte[])二進制高頻讀取close() 關底層
BufferedWritercharwrite(String/char[])/newLine()文本高頻寫入、換行flush() 刷緩衝;close() 刷緩衝+關底層
BufferedReadercharreadLine()/read()/read(char[])文本按行讀取、高頻讀取close() 關底層

四、最佳實踐鐵律

  1. 包裝順序:節點流在內,緩衝流在外。new BufferedInputStream(new FileInputStream(file))
  2. 只關外層:bufferedStream.close() 會自動關閉底層節點流,不要重複關閉。
  3. 字節流無需手動 flush(除非即時性要求),close() 會自動 flush。字符流建議適時 flush() 確保數據落盤。
  4. 緩衝區大小:默認 8192 通常足夠。大文件可調大至 16KB-64KB(16384-65536),需平衡內存佔用。
  5. 讀取文本必用 BufferedReader.readLine(),比 Scanner 更輕量、更可控、無正則開銷。

五、總結

四大緩衝流是 Java IO 高性能的基石:BufferedInputStream/OutputStream 守護二進制,BufferedReader/Writer 統治文本。牢記包裝順序、只關外層、善用 readLine()/newLine(),你的 IO 代碼將兼具性能與優雅。

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