2012-01-12 77 views
2

當使用BufferedOutputStream時,我認爲直到我們使用flush纔會發生真正的輸出? BufferedInputStream怎麼樣,有沖洗的方法嗎?任何人都可以解釋BufferedInputStream的原理嗎?

+2

來吧夥計們,讓他有些鬆懈。當我開始編程時,我無法理解客戶端和服務器之間的區別。這個問題並沒有那麼糟糕。 – Raku 2012-01-12 13:47:36

回答

1

沒有沖洗方法。刷新方法僅用於輸出。

0

這個想法是,BufferedInputStream以相對較大的塊向底層流詢問數據。這種想法是,請求大塊數據比向操作系統少量數據請求更有效。

沒有沖洗的方法,因爲它不需要(沒有寫,所以沒有什麼可刷新)。

3

Flushing意味着您將緩衝區的完整內容寫入磁盤。這隻有在你編寫的磁盤時纔有意義,但是當你正在從讀取時。

有些人可能會在閱讀上下文中使用「刷新緩衝區」,當他們想要明確緩衝區出於某種原因。

但我會致電寫入操作沖洗和讀取操作清除,以避免混淆。

在學習基礎知識時,術語和準確的講話很重要。嘗試獲得這種習慣。它會幫助你很多:)

0

每當你需要讀取更多的數據時,有一個從操作系統的read()。沒有相同的flush()。

MemoryMappedByteBuffer中最接近的位置,您可以在其中觸發需要加載的區域。

3

BufferedOutputStream中的實際輸出發生在內部緩衝區已滿或沖洗時。

使用BufferedInputStream沒有刷新,因爲它沒有意義。

它所做的就是讀取其內部緩衝區中的大量來自底層流的數據,這被認爲是昂貴的調用,然後在您請求時有效地爲您提供小部分數據。只要讀取了一個緩衝區數據,它就會自動從底層流中爲您讀取下一個緩衝區。所以,它的操作對你來說是完全透明的。

0

如果您有選擇,請始終使用BufferedInputStream,因爲它爲您帶來了此線程中已列出的優勢,並且還實現了.mark()和.reset() - 允許您「重複使用」流的方法(有點)。

相關問題