2 回答
TA贡献1862条经验 获得超7个赞
Java Runtime Library 中有许多方法采用例如 an OutputStream
(例如Files.copy()
)。除非这些方法明确声明该方法将关闭流,否则不会关闭流。关闭流是流“所有者”的责任,例如方法的调用者。
类似地,InflaterInputStream
that的构造函数都不会Inflater
声明它们将end()
执行Inflater
,这意味着它们不会执行。在需要时由调用者来结束它。
Inflater
当使用为您创建的构造函数时, 成为该内部InflaterInputStream
的“所有者” ,因此结束. Inflater
InflaterInputStream
Inflater
资源管理
资源管理的一般准则是,除非另有说明,分配资源的人负责释放(关闭、结束……)资源。
Inflater
是一种资源,因此应用正常的资源管理规则。
TA贡献1818条经验 获得超8个赞
与许多“为什么”问题一样,这是一个有根据的猜测。我没有看到任何明确的解释,所以谁知道原来的程序员在想什么?无论如何,请对我的回答持保留态度。
其他构造函数都采用实例Inflater
,这意味着用户具有对 (internal) 的引用Inflater
。请注意,这些类没有吸气剂Inflater
。因此,用户引用它的唯一方法是从外部传递它(好吧,那并使用反射,但我们不要去那里)。
所以也许假设是因为用户通过了他自己的Inflater
实例,然后他想管理自己Inflater
,可能会在这个蒸汽结束后重新使用它。因此,Inflater
在流关闭时关闭不是一个好主意。
添加回答
举报