2012-03-13 47 views
0

我想不斷將數據寫入光盤。 我想經常刷新數據到光盤(例如每個64MB的塊)。你可以提出什麼解決方案?頻繁刷新的優化()

我認爲標準OutputStream可能比nio.channels更好的選擇,因爲它更直接。

+0

也許你可以提供一個例子(你到目前爲止做了什麼)? – home 2012-03-13 20:41:13

+0

我嘗試在每次寫入之後使用nio.channel.write()和force()。每個寫入都是固定的大小(例如64MB)。在這一刻我正在測試FileOutputStream.write()和FileOutputStream.flush()的性能 – olwe 2012-03-13 20:48:37

+0

當我在每次寫入性能下降60-70%後使用force()時 – olwe 2012-03-13 20:50:56

回答

1

如果您正在編寫連續的數據流,例如追加到文件的末尾,則定期調用與flush()偶爾調用同樣好或比nio更好。 nio可以給你一個很大的優勢,將寫在文件的不同區域的許多小塊。在這種情況下,您可以使用內存映射文件,這可以是對舊式寫入的改進。但是,從我所瞭解的問題來看,您正在處理連續的數據流。我建議你實施常規的解決方案,讓你找到更好的代碼,並且只有在發現性能欠佳時才尋找替代方案。在這種情況下,我不希望nio明顯的差異。

+0

我正在寫一個連續的數據流到一個固定大小的塊的文件末尾,並且在**同時**我從文件中的其他位置讀取連續的塊。閱讀和寫作都非常重要。 – olwe 2012-03-13 21:16:41

+0

如果你一次從一個地方讀書,並且訪問來自連續的位置,那麼使用舊的'io'軟件包仍然可以。 – 2012-03-13 21:19:37