Ⅰ 為什麼要有輸入輸出緩沖區
有輸入輸出緩沖區用以暫時存放讀寫期間的文件數據而在內存區預留的一定空間。即利用主存的存儲空間來暫存從磁碟中輸入輸出的信息。目的是緩和CPU 與 I/O 設備間速度不匹配的矛盾。減少對 CPU 的中斷頻率,放寬對 CPU 中斷響應時間的限制。提高CPU和 I/O 設備之間的並行性。
(1)緩存區和輸入流擴展閱讀:
輸入輸出緩沖區通過磁碟緩存來實現,磁碟緩存本身並不是一種實際存在的存儲介質,它依託於固定磁碟,提供對主存儲器存儲空間的擴充。 主存可以看作是輔存的高速緩存, 因為輔存中的數據必須復制到主存方能使用;反之,數據也必須先存在主存中,才能最終輸出到輔存。
當輸入與輸出或生產者與消費者的速度基本相匹配時,採用雙緩沖能獲得較好的效果,可使生產者和消費者基本上能並行操作。
Ⅱ java 緩沖輸入流 和 字元輸入流 什麼樣的區別
是指 Buffered... 那個流么?
帶buffered,意味著,他會在內存里給你開一塊緩沖區,並預先將輸入流填滿緩沖區,你的操作其實是從緩沖區讀取。
而不帶buffered,意味著,你每一次讀取都是從imputstream裡面讀。
Ⅲ 輸入流的清空C++標准輸入流緩沖區
調用iostream輸入數據時,若用戶輸入的數據類型與要求的不符(比如要求讀入整數而用戶輸入的不是數字),則cin會被設置為fail(可以用!cin判斷),而用戶輸入的數據仍然留在流緩沖區里,需要手動清空:cin.clear();cin.ignore(numeric_limits::max(),' ');
Ⅳ C語言中的緩沖區和數據流是一個概念嗎
不是一個概念。這兩個東西常在從硬碟讀取數據的過程中使用。數據流是指你要從硬碟中讀取並放到內存的那一段數據,就跟你打開水龍頭然後再關上流出的一段水一樣。而緩沖區是指你讀取的那段數據在內存中存放的區域。
至於為什麼要有緩沖區呢?因為硬碟讀寫很慢,你如果再一個位元組一個位元組得讀,效率會更低。
而內存的讀取速度很快,所以先把整段的文字一口氣讀下來放到緩沖區以後再一個一個轉碼(從位元組碼轉成字母數字元號漢字)可以大幅度提高運行效率。
Ⅳ 同樣有緩沖區,為什麼bufferedReader輸入流不需要清空緩沖區而bufferedWriter需要清空緩沖區呢
當BufferedReader在讀取文本文件時,會先盡量從文件中讀入字元數據並置入緩沖區,而之後若使用read()方法,會先從緩沖區中進行讀取,如果緩沖區數據不足,才會再從文件中讀取。清不清空BufferedReader的緩沖區都對文件本身沒什麼影響,清了還影響速度
使用BufferedWriter時,寫入的數據並不會先輸出到目的地,而是先存儲至緩沖區中。如果緩沖區中的數據滿了,才會一次對目的地進行寫出。BufferedWriter的緩沖區如果不清空,有可能有部分內容只是寫進緩沖區,但沒有真正寫入文件,這樣很可能導致文件內容不全甚至是空白。
Ⅵ JAVA中 輸入 輸出流 的read 和write其實都是往自己的緩存區寫數據嗎我對 寫入 和讀入完全搞混了 求解答啊
io流分為位元組流,字元流。位元組流繼承於 InputStream、OutputStream,字元流繼承於 Reader、Writer。不論是什麼流,read()都是讀的意思 把指定的文件內容讀出來,存入程序中;而write()是寫的意思 把指定的內容,從程序寫入到指定的文件中。
Ⅶ java 里的輸入輸出流是都採用帶緩沖區技術嗎還是說只有緩沖流帶緩沖區
有緩沖的都是有buffer的想BufferReader和BufferWriter這些方法
Ⅷ JAVA中輸入輸出流和緩沖式輸入輸出流出有什麼區別
簡單地說,緩沖式輸入輸出流利用了緩沖區,而不是像一般的輸入輸出流那樣,每次讀取或寫入數據都會引起對設備(如存放在磁碟上的文件)的訪問。
具體說來,
緩沖式輸入流BufferedInputStream(InputStream
in),新建一個默認大小的緩沖流。從一個流中讀取字元,而不會每次都引起對設備的訪問。當緩沖區空的時候,一個新的數據塊將會被讀入緩沖區。
緩沖式輸出流BufferedOutputStream(OutputStream
out),新建一個默認緩沖大小的緩沖流。緩沖輸出流收集寫入的字元以避免每次都引起對設備的訪問。當緩存區滿或者被刷新里,數據被寫入設備。
Ⅸ 輸入流 和輸入緩沖區什麼關系啊
1、按下enter會把之前輸入的字元(包括回車符自己)送入到輸入緩沖區,但並不會刷新輸入流。輸入流是C++自己實現的,流的使用也由它管理,C++並沒有接收到回車符就刷新輸入緩沖流一說。在輸入緩沖區的內容被讀取完之前(除\r\n等),它不會再提示用戶作新的輸入,所以表面上看起來,用戶回車後它的內容也更新了,其實是它之前的內容已經被讀完。
2、不存在了。輸入流就像一個先進先出的位元組隊列,位元組被讀出後就被丟掉了。
3、向上面那位 Xuxu8511 說的(請見諒),用cin、get、getline、getchar、gets等都能獲取輸入流的數據,另外,getch、getche等不能獲取輸入流的數據。
4、cin>>i語句會先檢查緩沖區有沒有數據,如果沒有它會提示用戶輸入,輸入 "12 78」 回車後,這些字元會先送到輸入緩沖區,這時緩沖區的內容為 "12 78 \r\n」。之後它會讀緩沖區內容,因為i是int型,所以它遇到空格停止讀,把12的值賦給i,並刪除緩沖區的12。cin>>j也是類似。
Ⅹ 一個關於java 位元組緩沖輸入輸出流的問題
1.
緩沖區是一個內存區域的概念,類似於池子
2.
流就像一根管道,因為使用了一個池子(緩沖區)作為中間過渡,所以稱為緩沖流
3.
使用緩沖流的目的是為了減少直接與硬碟交互傳輸的次數,增加每次傳送的數據量,藉以提高傳輸效率,保護硬體