提升 I/O 效能的四大黃金法則:
無論字元或位元組流,務必套上 BufferedReader、BufferedInputStream 等緩衝裝飾器,或直接使用 read(byte[])、read(char[]) 區塊讀取方法,大幅降低系統呼叫次數。
InputStream/OutputStream 直接處理位元組,無編碼轉換開銷;Reader/Writer 內建編碼轉換,效能較低。純二進位資料(圖片、影音、序列化物件)必須用位元組流。
char 佔 2 位元組(UTF-16),byte 僅 1 位元組。處理 ASCII 或二進位資料時,直接操作 byte[] 可節省一半記憶體頻寬,並避免 Unicode 轉換成本。
緩衝流雖優於單字元讀寫,但仍涉及多次方法呼叫。若效能極度敏感,可自行管理 byte[] 或 ByteBuffer(NIO),一次讀入大塊資料,記憶體中處理後再寫出,消除方法呼叫開銷。
資源釋放必須在 finally 或 try-with-resources(Java 7+)中執行,確保正常或異常路徑都能釋放檔案控制代碼、網路連接等稀缺資源。
資料庫連線、大型快取、線程池等昂貴資源,用完立即 close() 或歸還池中,避免長期佔用導致記憶體壓力或連線耗盡。
try (InputStream in = new BufferedInputStream(new FileInputStream(src));
OutputStream out = new BufferedOutputStream(new FileOutputStream(dest))) {
byte[] buffer = new byte[8192];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
}
採用 try-with-resources 自動關閉、8KB 緩衝區、位元組流、區塊讀寫,兼顧效能與資源安全。