2014-02-09 69 views
4

我對Java中的緩衝區大小有一些疑問。爲什麼我們將緩衝區大小設置爲10242^n。例如:Java中的緩衝區大小

inputStream = file.getInputStream(); 
    File newFile = new File("C:/uploads/operators.xml"); 
    outputStream = new FileOutputStream(newFile); 
    int read = 0; 

    byte[] bytes = new byte[1024]; 
    while ((read = inputStream.read(bytes)) != -1) { 
     outputStream.write(bytes, 0, read); 
    } 
    outputStream.close(); 
    inputStream.close(); 

outputStream.write(bytes, 0, read);如何工作?爲什麼我們使用bytes數組?

回答

1

read字節長度爲bytes.length從文件流並將它們存儲在字節數組bytes[]。然後你在outputStreem中的write字節形成bytes[]數組。有關更多信息,請參閱Java I/O文檔。

+0

但爲什麼'2^n'?爲什麼不只是'1000'? – Tony

+0

@Tony因爲[1024字節== 1千字節](http://pc.net/helpcenter/answers/why_1024_bytes)。 –

+0

那麼我們爲什麼要使用千字節? – Tony

1

爲避免浪費文件系統,字節大小應該是文件系統扇區大小的倍數(例如512字節)。

同樣適用於CPU L1緩存。 大多數Intel 486 CPU具有1K L1緩存,因此值爲1024。 奔騰CPU至少有8K L1緩存,因此8 * 1024也經常使用。

最近的文件系統有一個扇區大小4K和最近的CPU至少有64K L1緩存,因此64 * 1024也是一個選擇。

+0

這正確回答了更多問題。實際上,文件系統一次不讀或寫一個字節。它一次移動字節塊。 我試圖回憶當我讀到這一段時間,所以可能是不正確的,但我相信,如果您選擇緩衝區大小爲'508',並且系統每次移動512字節,您嘗試的四個字節無論如何,保存文件系統都不會使用。 – Steve