Java I/O 流透過 BufferedInputStream 和 BufferedOutputStream 提供緩衝機制,提高讀寫效能。 BufferedInputStream 從底層輸入流讀取資料並儲存在內部緩衝區中,提高對頻繁讀取小資料塊的效能。 BufferedOutputStream 將資料寫入內部緩衝區,當緩衝區已滿或需要立即刷新時,寫入底層輸出流,最佳化對不頻繁寫入大資料區塊的效能。
Java I/O 流的緩衝機制
緩衝機制概述
Java I/O 流提供了緩衝機制,它透過在記憶體中儲存資料區塊(緩衝區)來提高讀寫效能。當操作緩衝區時,I/O 操作是針對緩衝區進行的,而不是直接針對底層檔案或流。這可以節省系統呼叫和上下文的切換時間。
緩衝機制的實作
Java I/O 流中的緩衝機制是透過使用BufferedInputStream 和BufferedOutputStream 輸入/輸出流實現的。這些流包含內部緩衝區,用於在記憶體中儲存資料塊。
BufferedInputStream
BufferedInputStream
讀入資料並儲存在內部緩衝區中。當緩衝區填滿時,流會從底層輸入流中讀取另一個資料區塊,填入緩衝區,並傳回緩衝區中的第一個位元組。這提高了對小資料塊頻繁讀取的效能。
BufferedOutputStream
BufferedOutputStream
將資料寫入內部緩衝區。當緩衝區已滿或需要立即刷新資料時,流將緩衝區中的資料寫入底層輸出流。這優化了對大數據塊的不頻繁寫入的效能,減少了系統呼叫的數量。
實戰案例
考慮以下程式碼,它使用BufferedInputStream
讀入一個文字檔案:
try (BufferedInputStream in = new BufferedInputStream(new FileInputStream("input.txt"))) { byte[] buf = new byte[1024]; int bytesRead; while ((bytesRead = in.read(buf)) != -1) { System.out.write(buf, 0, bytesRead); } } catch (IOException e) { e.printStackTrace(); }
在此範例中,BufferedInputStream
將資料分塊讀入內部緩衝區,從而提高了對小資料區塊頻繁讀取的效能。
需要注意的點
BufferedInputStream
和BufferedOutputStream
類別的緩衝區是透過 java.io.BufferedInputStream.DEFAULT_BUFFER_SIZE
(預設為8192 位元組)指定的,您可以在建置流程實例時覆寫此值。 flush()
方法時,BufferedOutputStream
會立即將緩衝區中的資料寫入底層輸出流,而BufferedInputStream
則會在從緩衝區中讀取所有資料或關閉流時刷新緩衝區。 以上是Java I/O流的緩衝機制是如何實現的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!