2 回答

TA貢獻2003條經驗 獲得超2個贊
您確實不需要這樣做。
經驗法則:如果您沒有使用自己創建/打開它new SomeOutputStream()
,則不需要自己關閉它。例如new FileOutputStream("c:/foo.txt")
,如果它是一個,那么您顯然需要自己關閉它。
有些人仍然這樣做的原因僅僅是為了確保不會再將任何內容寫入響應主體。如果發生這種情況,則將IllegalStateException
在appserver日志中導致,但這不會影響客戶端,因此客戶端仍會獲得正確的響應。這也是一種較容易的調試,可以發現請求-響應鏈中的潛在問題,這些乍看之下不會發現。例如,其他事情正在將更多數據附加到響應主體,位于鏈的更下游。
在初學者中看到的另一個原因是,他們只是想防止更多數據寫入響應主體。當JSP在響應中不正確地發揮作用時,您經常會看到這種情況。他們只是忽略IllegalStateException
日志中的。不用說,這個特定目的是有害的。

TA貢獻1865條經驗 獲得超7個贊
如果您打開了另一個InputStream對其進行包裝,則可能要關閉該流,因為該容器將看不到包裝流的可見性,包裝流可能包含未提交的字節。理想情況下,如果它是BufferedOutputStream之類的,則只刷新()包裝的數據流,但是我發現在使用CipherOutputStream時此類不會完全寫入數據(在這種情況下,我有充分的理由相信)。在這種情況下,有必要調用close()以便客戶端獲得正確的響應。
添加回答
舉報