最近我在一次採訪中被問到了這個問題。如何在讀取/寫入文件時克服硬件限制。
給定一個輸入文件,一個正則表達式和一個輸出文件。讀取輸入文件,將每行匹配到正則表達式,並將匹配行寫入輸出文件。
我想出了使用鏈接到FileReader的BufferedReader(以優化磁盤讀取)的粗略方案。我使用了類似的寫法。
面試官然後說,這個過程需要3秒鐘從文件讀取一行,1秒比較正則表達式和行,另外5秒鐘回寫。所以每行總共需要9秒。我們該怎樣改進這個?
我建議一次讀取整個文件,處理它並一次寫入整個輸出文件。然而,我被告知,這將無濟於事(寫1行= 5秒,寫2行= 10秒)。
面試官進一步表示,這是由於硬件/硬盤驅動器的限制。我被問到如何改進我的代碼以減少每行的總秒數(目前爲9)?
我只能想到緩衝讀/寫,並且在SO上也找不到太多。有什麼想法嗎 ?
多線程和同步?你不需要等待1秒的正則表達式處理,並繼續閱讀下一行。在正則表達式處理完之後,另一個正在等待匹配行的線程可以寫入輸出。但我懷疑這最後一步會帶來很大的改進,因爲你有一張光盤,它可以讀或寫一個特定的時刻。 – A4L 2013-03-03 14:22:40