2013-09-25 71 views
1

我正在編寫一個小型的基於java的工具來處理mysqldump文件,這個文件可能會變得非常大(現在達到1 GB)。我使用此代碼讀取和處理文件:對於字符緩衝區Java的大小適當的尺寸

BufferedReader reader = getReader(); 
BufferedWriter writer = getWriter(); 

char[] charBuffer = new char[CHAR_BUFFER_SIZE]; 
int readCharCout; 
StringBuffer buffer = new StringBuffer(); 

while((readCharCout = reader.read(charBuffer)) > 0) 
{ 
    buffer.append(charBuffer, 0, readCharCout); 
    //processing goes here 
} 

什麼是一個很好的規模爲charBuffer?目前它被設置爲1000,但是我的代碼將以任意大小運行,那麼根據文件大小,最佳實踐還是可以計算此大小?

由於在未來, 問候菲利普

+3

Oracle的'BufferedReader'已經使用默認的緩衝區'8192'。 –

+0

我不知道這是否有一個標準,因爲它取決於你的可用內存。我會建議用不同的尺寸來試驗它,看看它是如何影響你的表現的 – StormeHawke

+0

或者@SotiriosDelimanolis比我更瞭解它...大聲笑 – StormeHawke

回答

2

它應該永遠是2的n次方的最佳值是基於操作系統和磁盤格式。在我看到的代碼中,經常使用4096,但越大越好。

此外,有better ways加載文件到內存中。

+0

超過2的冪,它應該是1024的冪。 –

+0

我嘗試了一堆2的冪值,運行得很好。但除了非常小的值,我看不到任何非凡的性能增益,但我想這是由於我的實施 – philipp

+0

我可能是由於很多因素。許多操作系統和磁盤控制器都足夠智能,可以提前讀取塊。發生這種情況時,除了往返於OS API的成本外,您的緩衝區大小無關緊要。 – mikeslattery