2 回答

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

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您打開了另一個(gè)InputStream對(duì)其進(jìn)行包裝,則可能要關(guān)閉該流,因?yàn)樵撊萜鲗⒖床坏桨b流的可見性,包裝流可能包含未提交的字節(jié)。理想情況下,如果它是BufferedOutputStream之類的,則只刷新()包裝的數(shù)據(jù)流,但是我發(fā)現(xiàn)在使用CipherOutputStream時(shí)此類不會(huì)完全寫入數(shù)據(jù)(在這種情況下,我有充分的理由相信)。在這種情況下,有必要調(diào)用close()以便客戶端獲得正確的響應(yīng)。
添加回答
舉報(bào)