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