我想知道使輸出流爲null而不是關閉它的後果。如果我out = null,會導致資源泄漏嗎?想知道out = null而不是out.close()的後果。輸出是FileoutputStream的實例
回答
如果我做
outputStream = null
,這會導致資源泄漏?
可能是的,儘管它取決於流(最終)連接到什麼。
另一個問題是它是否重要。這也要看...
如果流包括輸出管道緩衝,然後分配
null
的,而不是關閉可能會導致緩存數據丟失。如果您反覆這樣做,泄漏的資源可能會累積,最終導致您的應用程序失敗,因爲它已用完「文件描述符」。另一方面,如果您緩慢地泄漏資源,則有可能在「文件描述符」短缺之前流將被垃圾收集並最終確定。 (該
finalize()
方法調用close()
...)
但無論哪種方式,它是最佳實踐打電話close()
......並確保關閉總是發生用「嘗試/終於「或」嘗試資源「。指定null
而不是打電話close()
正在尋求麻煩。
總是close
您的流。
Stream
不僅是像普通java堆一樣的普通對象,它處理底層的寫入操作系統。
然後沖洗也不會發生,如果你讓你的參考null
見密切
刷新的文檔輸出流,並強制任何緩衝的輸出字節被寫出。 flush的一般契約是,調用它表明,如果先前寫入的任何字節已被輸出流的實現緩衝,則應立即將這些字節寫入其預定目標。
那麼,關於上述過程中如果你只是做reference
簡單null
?如果您正在使用java7
你的問題將不會從JDK7
提高,即The try-with-resources Statement,那麼你將永遠不會有明確關閉流。
@suresh atta我們使用Java JDK 1.5.0_22。在jdk7之前是否有與try-with-resources聲明等價的內容? – ravikuwi
@ravikuwi沒有號碼它在Jdk 1.7中引入。對於以下版本,您可以調用'close()'。有一件事我想問一下,調用close()怎麼了? –
不知道outputStream的實現,很難回答你的問題。但請記住,當您將變量設置爲null時,您並未消除該變量最初指向的對象。將東西設置爲null並不等同於在C++中調用delete,或者在Objective-C中釋放。沒有自動調用的清理代碼。這正是close()首先存在的原因。你可以假設它既然存在,它就可以用來完成它所說的 - 清理資源。
總之答案是肯定的,那可能會泄漏資源。調用打算要求清理的方法!
通過將jsut設置爲null
的引用,您不會釋放基礎文件句柄。這意味着你依賴於垃圾收集器和終結來做到這一點,這很可能會導致運行時錯誤,因爲如果終結不能跟上,操作系統將耗盡文件句柄。此外,它不會確定您寫入流的內容何時會將其寫入磁盤。
- 1. 想知道替換後的「null」
- 2. 實現的,而不是類的實例
- 3. 我想知道代碼的輸出
- 4. 如果表列是NULL我想設置長變量NULL而不是0
- 5. 動作方法傳遞類型的實例而不是null
- 6. AWGN通道輸出實數而不是複數
- 7. 從ant直接輸出到powershell實例而不是cmd.exe窗口
- 8. any_instance不是實例不可知的
- 9. null而不是==
- 10. 找出對象是類對象而不是類的實例
- 11. 如果ELIF語句與&是給出意想不到的輸出
- 12. 系統輸出「null」而不是所需的字符串
- 13. forwardInvocation而不是實例的其他類
- 14. 想知道ASP.NET是否是RESTful?
- 15. MySQL返回NULL而不是實際值
- 16. Biopython類實例 - 從Entrez.read輸出:我不知道如何操縱輸出
- 17. 我想知道如果我的ER模型是好的
- 18. android findViewById獲取null而不是混合實例
- 19. C++詭計:輸出實際枚舉,而不是它的值
- 20. 獲取SQL Server的本地實例而不是命名實例
- 21. 輸出不是我想要的
- 22. 回聲輸出是意想不到的
- 23. 輸出不是我理想的東西
- 24. 想讓輸出作爲對象,而不是的println
- 25. 我想選擇退出而不是輸入輸入
- 26. 如何知道模型的實例是由子模型的實例創建的?
- 27. Python類輸出十六進制值而不是列表,不知道爲什麼?
- 28. JQ:ID而不是數字的輸出值
- 29. 的Oracle實例「而不是」觸發
- 30. PowerShell:正則表達式的輸出而不是結果
取決於'OutputStream'的類型。 –
@Sotiros Delimanolis它是FileOutputStream – ravikuwi
你不能。您只能對輸出strem null進行引用。 – Ingo