2 回答

TA貢獻(xiàn)1862條經(jīng)驗 獲得超7個贊
Java Runtime Library 中有許多方法采用例如 an?OutputStream
(例如Files.copy()
)。除非這些方法明確聲明該方法將關(guān)閉流,否則不會關(guān)閉流。關(guān)閉流是流“所有者”的責(zé)任,例如方法的調(diào)用者。
類似地,InflaterInputStream
that的構(gòu)造函數(shù)都不會Inflater
聲明它們將end()
執(zhí)行Inflater
,這意味著它們不會執(zhí)行。在需要時由調(diào)用者來結(jié)束它。
Inflater
當(dāng)使用為您創(chuàng)建的構(gòu)造函數(shù)時, 成為該內(nèi)部InflaterInputStream
的“所有者”?,因此結(jié)束.?Inflater
InflaterInputStream
Inflater
資源管理
資源管理的一般準(zhǔn)則是,除非另有說明,分配資源的人負(fù)責(zé)釋放(關(guān)閉、結(jié)束……)資源。
Inflater
是一種資源,因此應(yīng)用正常的資源管理規(guī)則。

TA貢獻(xiàn)1818條經(jīng)驗 獲得超8個贊
與許多“為什么”問題一樣,這是一個有根據(jù)的猜測。我沒有看到任何明確的解釋,所以誰知道原來的程序員在想什么?無論如何,請對我的回答持保留態(tài)度。
其他構(gòu)造函數(shù)都采用實例Inflater
,這意味著用戶具有對 (internal) 的引用Inflater
。請注意,這些類沒有吸氣劑Inflater
。因此,用戶引用它的唯一方法是從外部傳遞它(好吧,那并使用反射,但我們不要去那里)。
所以也許假設(shè)是因為用戶通過了他自己的Inflater
實例,然后他想管理自己Inflater
,可能會在這個蒸汽結(jié)束后重新使用它。因此,Inflater
在流關(guān)閉時關(guān)閉不是一個好主意。
添加回答
舉報