我正在分析加載二進制文件的代碼。加載時間約爲15秒左右。在Java中尋找BufferedInputStream的最佳大小
我的加載時間大部分來自加載二進制數據的方法。
我有下面的代碼創建我的DataInputStream類:
is = new DataInputStream(
new GZIPInputStream(
new FileInputStream("file.bin")));
而且我改成了這樣:
is = new DataInputStream(
new BufferedInputStream(
new GZIPInputStream(
new FileInputStream("file.bin"))));
所以我做了這個小修改的代碼加載從15秒跑到後4.
但後來我發現BufferedInputStream有兩個構造函數。另一個構造函數允許您明確定義緩衝區大小。
我有兩個問題:
- 選擇什麼大小的BufferedInputStream,是理想?如果沒有,我怎麼才能找到緩衝區的最佳尺寸?我應該寫一小段代碼來進行二分查找嗎?
- 這是我可以使用BufferedInputStream的最佳方式嗎?我原本在GZIPInputStream中使用它,但是可以忽略的好處。我假設代碼現在正在做的是每次需要填充文件緩衝區時,GZIP輸入流會通過並解碼x個字節(其中x是緩衝區的大小)。完全忽略GZIPInputStream是否值得?這絕對不是必需的,但是當使用它時,我的文件大小會大大減少。
我建議你在從磁盤讀取數據時爲GZIPInputStream嘗試一個64K的緩衝區。我使用1 MB,這可能超過需要。 ;) – 2010-12-14 10:47:34