每隔幾天,我會得到一個SocketException,打開太多文件。我將這個問題追蹤到在某個過程中正在使用的臨時pdf文件。該過程傳遞庫創建的臨時文件的名稱。在某些時候,庫會打開一個輸入流,但不會關閉它。鑑於我的代碼只有文件的名稱,有什麼方法可以關閉流?我正在使用的庫打開一個輸入流並且不關閉它。我怎樣才能關閉它?
詳情: Java的Web應用程序中的Tomcat6
每隔幾天,我會得到一個SocketException,打開太多文件。我將這個問題追蹤到在某個過程中正在使用的臨時pdf文件。該過程傳遞庫創建的臨時文件的名稱。在某些時候,庫會打開一個輸入流,但不會關閉它。鑑於我的代碼只有文件的名稱,有什麼方法可以關閉流?我正在使用的庫打開一個輸入流並且不關閉它。我怎樣才能關閉它?
詳情: Java的Web應用程序中的Tomcat6
運行最好的辦法是要求一個版本庫的這個錯誤修復。
如果這不可行,請獲取源代碼,自行修復錯誤。
如果你不能(只有一個二進制jar文件),嘗試像jd-gui這樣的工具,反編譯有問題的類,修復,重新編譯該類並替換jar中的.class。
如果仍不起作用,請使用ASM並在正確的位置添加一條關閉語句。這個解決方案應該避免。如果你不掌握這項技術,這很複雜。
如何使用反射? –
@ Adriaan Koster:據我瞭解OP的問題,在對象的引用丟失之前,可能無法及時訪問來自外部世界的流。 – Xvolks
可能,是的,但它可能是一個私人領域......在這種情況下,我認爲反射會比字節代碼操作更可取。 –
你能告訴我怎麼稱呼圖書館,它可以幫助我們找到解決問題的辦法 – Ferrybig