2011-11-03 108 views
0

從內部手機存儲中讀取一個小文件(138 kb)非常緩慢。大約需要490毫秒。寫入相同的文件僅在70 ms中完成。 (在仿真器中測得)緩慢讀取文件

有沒有加速的建議?

謝謝,亞歷山大Miehlke,柏林

private String readFromInternal(String filename) { 
    try { 
     FileInputStream fileInputStream = openFileInput(filename); 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream)); 
     StringBuilder stringBuilder = new StringBuilder(); 
     String line; 
     while ((line = bufferedReader.readLine()) != null) 
      stringBuilder.append(line); 
     return stringBuilder.toString(); 
    } catch (Exception e) { 
     return null; 
    } 
} 

private boolean writeToInternal(String filename, String text) { 
    try { 
     FileOutputStream fileOutputStream = openFileOutput(filename, Context.MODE_PRIVATE); 
     fileOutputStream.write(text.getBytes()); 
     fileOutputStream.close(); 
     return true; 
    } catch (Exception e) { 
     return false; 
    } 
} 

回答

-1

你的問題是,你正在閱讀逐行,但一氣呵成寫。嘗試將文件一次讀入緩衝區而不是while循環。

+2

令人懷疑。他正在使用BufferedReader。如果緩衝區足夠大,那應該沒什麼區別。 –

0

我不會在模擬器上對任何東西進行基準測試。你可以可能通過確保你的BufferedReader有一個相對較大的緩衝區來加快速度。說4k-ish。多年前我爲了獲得最佳緩衝區大小而進行了一般性Java測試,並且在1-2k以上,似乎沒有多大幫助。

試試手機上。

爲什麼閱讀速度比寫作速度慢不止我,但同樣,模擬器並不是您想要進行基準測試的地方。

可能嘗試顛倒緩衝區位置。把緩衝流周圍,而不是讀者:

新的BufferedReader(新的InputStreamReader(新的BufferedInputStream(的FileInputStream,2048)))

我假設你使用一個BufferedReader能夠通過在線閱讀。創建2個bufferes可能不是很好,所以如果你有一種方法來讀取不需要BufferedReader的行,你可能會更好。

+0

我已經在我的智能手機上試過了,但它很相似。讀取同一個文件需要700ms。寫作也很慢(1469毫秒)。增加緩衝區沒有效果。 – almisoft

+0

雖然這些數字很大,但電話號碼對我來說更有意義(寫入時間長於讀取時間)。如前所述,我會在InputStreamReader之前放置BufferedInputStream,並至少使用2K緩衝區。如果它仍然不好,我會做一些原始的閱讀測試。製作一個大的字節數組,並一次讀取整個文件。逐行忘記。刪除儘可能多的變量。在循環中多次運行讀取的文件(由於操作系統緩存可能需要不同的文件)。 –

+0

我嘗試了各種方法,並進行了大量測試,但速度很慢。現在我將數據(不是這些大文件)保存在數據庫中,這隻需要幾毫秒。 – almisoft