關閉流的正確方式

2021-09-16 19:07:16 字數 602 閱讀 3738

最近寫了乙個bug:(以下為網上找的例子)

try 

if (osw!= null) if (fos!= null)

}catch (exception e)

看似流已經關閉了,也try了有什麼問題呢?

現在有一種情況

當我們關第乙個流時出了異常然後catch捕獲異常,但是我們總共需要關閉三個流後面的兩個流並沒有及時關閉就可能會出現記憶體溢位的情況,所以我確實是把測試環境的服務給撐掛了,也得虧還沒有上線。

正確寫法

finally 

}catch(exception e)

try}catch(exception e)

}

每一次關閉流我們都單獨進行一次try,而且需要寫在finally中保證異常了也要執行,不要嫌棄**繁瑣因為這是必須的內容。

可能乙個這樣不起眼的小問題就會撐爆一套服務,然後各個服務又是互相呼叫,這下好了乙個小小的細節公司的一套業務線都掛了,然後一群人開始排查問題,最後就是因為流關閉沒有處理好,所以細節不可小視

mfc關閉模態dialog的正確方式

在模態對話方塊中 正常的使用者觸發的onok oncancel 訊息都是通過呼叫函式enddialog去關閉模態對話方塊的,enddialog函式並不立即清除對話方塊。而是設定乙個標誌,並且允許對話方塊應用程式把控制權返回系統。系統在試圖從應用程式佇列檢索下乙個訊息之前檢測標誌。如果已經設定了標誌則...

1 7以後 io流自關閉資源的方式

jdk1.7的關閉資源的方式 流的父類 都實現乙個介面 autocloseable 可能自動關閉的介面 1.7新特性 fileintpustream fis null fileoutputstream fos null try 要自動關閉的流 前提是該類必須實現了autocloseable介面 該處...

如何正確的關閉socket linux

曾經遇到過好幾個問題,都是與客戶端或者服務端沒有完整關閉socket相關的。在 裡,隨處可見這類問題,只是隱藏較深,不容易暴露bug而已。乙個半關閉狀態的socket,其發起關閉的一方狀態是fin wait2,另一方是wait close 關於 遠端已經關閉連線,為何socket send 還是返回...