2012-11-16 209 views
1

我無法找到IO流緩衝的基本概念,這是什麼意思。 任何教程和鏈接都會有所幫助。什麼是IO流緩衝?

+0

定義的C++標準的第27.6.2節;一些[這些書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)的教程或參考。 [This one](http://www.amazon.com/dp/0201183951/?tag=stackoverfl08-20)聽起來很有希望,儘管我沒有自己讀過。 –

回答

1

緩衝是處理輸入和輸出的軟件的基本部分。由於硬件和軟件以不同的速度運行,因此緩衝區保存位於軟件接口和硬件接口之間的數據。

生成數據的組件可以將其放入緩衝區,然後通過將收集的數據發送到下一個組件來「刷新」緩衝區。同樣,其他組件可能會「等待緩衝區」,直到完整的一塊數據或有效處理的數據足以用於輸入。

在C++中,std::basic_filebuf在文件系統文件上實現緩衝區。它存儲最多固定的字節數,所以操作系統總是以最小的事務大小工作,而程序可以根據需要訪問單個字符。

請參閱Wikipedia

+0

謝謝! ! 但我想知道它是如何在IO Stream中完成的。 – khirod

+0

@khirod這是非常通用的東西......但是,IOStream有一個非常複雜的系統。有關更深入的信息,請參閱http://en.cppreference.com/w/cpp/io/basic_filebuf。 – Potatoswatter

+0

謝謝,明白了:) – khirod

1

緩衝使用內存(用戶內存),而不是直接向OS(即磁盤)發送數據。保存在上下文切換。

+0

C++語言中的任何代碼使其更加清晰.. – khirod

+0

http://linux.die.net/man/3/fread和http://linux.die.net/man/3/fwrite等 –

1

這是概念。想象一下你有一個需要將數據寫入硬盤的應用程序。假設它想每隔半秒寫一些東西(例如更新日誌文件)。這個好嗎?不,這是原因。

軟件可以非常快,但硬盤的運行速度有限,而且比內存和應用程序慢得多。要寫一些東西,硬盤需要將其磁頭重新定位到特定的扇區(這可能涉及放慢光盤旋轉速度),寫入數據,然後重新定位到原來的位置。所以你的應用程序可能運行得非常慢(當然,這是一個理論上的例子)。

緩衝有助於解決這個問題。而不是每次都寫入光盤,數據正在內存中的某個地方被緩存。一旦收集到足夠數量的數據,緩衝區就會被刷新:數據將被寫入磁盤。這種方法有助於最大限度地減少硬盤驅動器的運作並提高整體速度