本文目錄一覽:
java-io流緩衝區的小疑問
你問的問題很有研究性,要處理的文件很小的時候這樣的確看不出來你說的區別,緩衝區是個可以重用的內存區,這個主要是用於CPU提高讀取文件的效率,而CPU的速度是遠遠高與內存的,假設你沒有這個緩衝區的話,CPU就會要不停的讀取文件,當在讀取較大的文件時,這樣處理效率是不是很低呢?內存速度慢,你這樣一個位元組一個位元組的送的話是不是整體的效率都低了啊?當你有緩衝的時候CPU在等緩衝區寫滿時是不是可以處理其它的信息呢?
Java中IO緩衝區的原理是什麼
如果是邊讀邊寫,就會很慢,也傷硬盤。緩衝區就是內存里的一塊區域,把數據先存內存里,然後一次性寫入,類似數據庫的批量操作,這樣效率比較高。
調用I\O操作的時候,實際上還是一個一個的讀或者寫,關鍵就在,CPU只有一個,不論是幾個核心。CPU在系統調用時,會不會還要參與主要操作?參與多次就會花更多的時間。
系統調用時,若不用緩衝,CPU會酌情考慮使用 中斷。此時CPU是主動地,每個周期中都要花去一部分去詢問I\O設備是否讀完數據,這段時間CPU不能做任何其他的事情(至少負責執行這段模塊的核不能)。所以,調用一次讀了一個字,通報一次,CPU騰出時間處理一次。
而設置緩衝,CPU通常會使用 DMA 方式去執行 I\O 操作。CPU 將這個工作交給DMA控制器來做,自己騰出時間做其他的事,當DMA完成工作時,DMA會主動告訴CPU「操作完成」。這時,CPU接管後續工作。在此,CPU 是被動的。DMA是專門 做 I\O 與 內存 數據交換的,不僅自身效率高,也節約了CPU時間,CPU在DMA開始和結束時做了一些設置罷了。
所以,調用一次,不必通報CPU,等緩衝區滿了,DMA 會對C PU 說 「嘿,夥計!快過來看看,把他們都搬走吧」。
綜上,設置緩衝,就建立了數據塊,使得DMA執行更方便,CPU也有空閑,而不是獃獃地候着I\O數據讀來。從微觀角度來說,設置緩衝效率要高很多。儘管,不能從這個程序上看出來。 幾萬字的讀寫\就能看到差距
java中的字符串緩衝區是什麼意思?
如果你說的緩衝區是在IO操作中的話,指的就是先將數據寫在內存中,等寫入一定數量後再往硬盤上寫。
如果你說的不是IO操作中的緩衝區的話,那可能是指StringBuilder這個類的作用了。
StringBuilder是一個類似於 String 的字符串緩衝區。可將字符串緩衝區安全地用於多個線程。所以比直接對String操作更有效率也更穩定。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/278359.html