2 回答

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

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