緩衝流工作原理

2021-09-26 09:41:42 字數 1543 閱讀 5380

之前i/o複習的時候,有個關於位元組緩衝的**

public

class

demo4

}catch

(ioexception e)

finally

}}

我們都知道緩衝流為我們預先開闢了乙個8192的緩衝陣列。

//bufferedinputstream原始碼片段

class

bufferedinputstream

extends

filterinputstream

//非緩衝流

while

((num = fileinputstream.

read()

)!=-1

)

在debug模式下我們也能很清楚的看到,確實乙個乙個字元乙個字元的寫入文件的。那麼這個這個8k用到**去了?真的快了嗎?

於是做了下面這樣的實驗

//緩衝流copy檔案

public

static

void

copyfilebybuffer

(file srcfile,file destfile)

throws ioexception

}catch

(ioexception e)

finally

}

public

static

void

copyfilebybyte

(file srcfile,file destfile)

throws ioexception

}catch

(ioexception e)

finally

}

public

static

void

main

(string[

] args)

throws ioexception

上面的**我因為檔案比較大,都開了乙個4k的緩衝區。發現單純的位元組流用的時間差不多是緩衝流的1.5倍。

這就很明顯的看出那8k的效率了。

如果不涉及自定義的緩衝區,操作是這樣的:來乙個位元組,請求一次io,然後再來乙個位元組再請求一次io。

如果如果不涉及自定義的緩衝區,操作起來是這樣的:來乙個位元組,先放入自帶的緩衝區,判斷緩衝區滿沒滿或者是不是全寫完了,是就請求乙個io把8k的資料一次性寫出去。

上面的**,都開了乙個4k的緩衝區。但是緩衝流的緩衝區有8k,也就是差不多兩個while請求一次io。

效率區別就是在這裡體現的,減少了請求io的次數。

這裡我們發現,快的只有1.5倍?不應該是2倍嗎?

當buf(我們自己定義的緩衝區大小).length當buf>buffer時,緩衝流的buffer就不會工作了。

緩衝流之所以能夠提高效能,主要是利用了在記憶體中開闢的buf空間來實現的,減少了直接消耗系統io資源的次數,從而提高了效能。

緩衝流之字元緩衝流

字元緩衝流 字元緩衝輸入流 bufferedreader 字元緩衝輸出流 bufferedwriter 完成文字資料的高效的寫入與讀取的操作 1字元緩衝輸出流 bufferedwriter void newline 根據當前的系統,寫入乙個換行符 public static void method0...

IO流 位元組緩衝流,字元緩衝流

處理流 裝飾流 位元組緩衝流,字元緩衝流 用於提高位元組流的效能 bufferedinputstream,bufferedoutputstream 位元組緩衝流 bufferedinputstream is newbufferedinputstream new fileinputstream fil...

java IO緩衝流高效原理及使用

帶緩衝的位元組輸入流 我們知道檔案位元組輸入流讀取時,是直接從位元組流中讀取的。由於位元組流是與硬體 儲存介質 進行的讀取,所以速度較慢。而cpu需要使用資料時通過read read byte 讀取資料時就要受到硬體io的慢速度限制。我們又知道,cpu與記憶體發生的讀寫速度比硬體io快10倍不止,所...