簡體   English   中英

Double BufferedWriter或BufferedReader的優點

[英]Advantages of Double BufferedWriter or BufferedReader

我知道BufferedWriterBufferedReader 不能直接與文件通信。 它需要包裝另一個Writer對象來完成它。 喜歡,

BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("abc.txt"));

這里我們簡單地使用BufferedWriter包裝FileWriter對象以獲得IO性能優勢。

但我也可以這樣做,

BufferedWriter bufferedWriter = new BufferedWriter(new BufferedWriter(new FileWriter("abc.txt")));

這里使用BufferedWriter包裝FileWrite對象,而BufferedWriter又使用另一個BufferedWriter進行包裝。 或者更邪惡的想法是將它進一步鏈接起來。

雙BufferedWriter有什么真正的優勢嗎? 或者進一步鏈接它? 這同樣適用於BufferedReader。

沒有好處,沒有。

首先,您必須了解緩沖的用途。 當您寫入磁盤時,硬盤驅動器需要將磁盤頭物理移動到正確的位置,然后等待磁盤旋轉,使其位於正確的位置, 然后在磁盤旋轉到磁頭下方時開始寫入字節。 相對而言,前兩個步驟比其余操作慢得多。 這意味着有很多固定的開銷:寫入1000個字節比寫入1個字節1000次要快得多。

因此,緩沖只是讓應用程序寫入字節的一種方式,這種方式對應用程序的邏輯很容易 - 一次一個字節,三個字節,1000個字節,無論如何 - 同時仍然獲得磁盤性能。 對緩沖區的大多數寫操作實際上不會導致任何字節轉到底層輸出流; 只有當你達到一定限度(比如說,每1000個字節)時才會寫入所有內容。

輸入也是一樣的想法。

因此,鏈接這些將無濟於事。 對於鏈,假設它們具有相同的緩沖區大小,您將寫入“外部”緩沖區,並且根本不會寫入“內部”緩沖區...然后當它達到其限制時,它將刷新所有那些字節到內部緩沖區。 該內部緩沖區立即達到其緩沖區限制(因為它們是相同的限制)並將這些字節直接刷新到輸出。 你沒有任何好處,但你必須在內存中復制字節一個額外的時間(到字節緩沖區)。

這里的“緩沖”主要反映了接口(API)的語義。 注意到這一點,通過鏈接BufferedReader組成IO管道是可能的。 通常,考慮在鏈的末端消耗單個字節可能涉及頭部的多次讀取,並且理論上和每個API可以簡單地基於在頭部讀取的數據進行計算

對於塊設備緩沖的一般情況(例如,從具有塊大小的數據傳輸的IO設備讀取,例如FS或網絡端點),鏈接緩沖區(有效隊列)肯定會增加內存消耗,立即增加處理延遲(由於增加緩沖區大小(總計)。 它通常會顯着提高吞吐量(對延遲產生負面影響)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM