我正在編寫一個webapp(SpringMVC + JSF),它允許用戶上傳他們的文件並編輯/與他人共享。在這個應用程序的服務層上,我使用番石榴來處理所有的文件IO,但不幸的是,從我在參考手冊中看到的東西中,番石榴並沒有解決併發訪問文件的問題。在webapp中同時訪問文件的最佳解決方案
我知道Java提供的FileChannel類有一個鎖定方法,它在某種程度上解決了這個問題,但它不適合於guava IO框架。在擺脫番石榴並用FileChannel和InputStream重寫我的代碼之前,我想知道是否有其他方法可以在不完全切換到另一個IO包的情況下執行此操作。
(A大的哈希表映射文件名來鎖看起來並不像一個很好的解決方案給我。當用戶基數大的有太多的內存來存儲。)
你可以在'File'對象上同步而不是鎖嗎? –
@ bmorris591會有很多文件,所以對象將在任何IO函數調用結束時立即銷燬。也許創建一個帶有文件名的數據庫表,設置讀者,設置作家是這樣的應用程序的最終解決方案,但我只會這樣做,如果真的沒有其他簡單的解決方案。 –
aaronqli
@ bmorris591除此之外,當別人閱讀時阻止讀者不是一個好主意。將文件對象標記爲「同步」會導致此不良行爲。 – aaronqli