流具有BaseStream.close()方法并实现AutoCloseable,但实际上几乎所有流实例在使用后实际上都不需要关闭。通常,只有源是IO通道的流(例如,由Files.lines(Path,Charset)返回的流)才需要关闭。大多数流都由集合,数组或生成函数支持,不需要特殊的资源管理。(如果流确实需要关闭,则可以在try-with-resources语句中将其声明为资源。)
“几乎所有”和“通常”是模糊的-如果您正在编写库,并且要从该Stream的用户中提取Stream的源,那么无论如何,您总是必须问自己一个问题-“我应该关闭这个?” IO支持的流需要关闭,因为终端操作不会调用close
,所以有效地我总是必须记住/记录我的Stream的来源,或者我总是必须这样close
做。
我猜想,最明智的选择是不从方法中返回Streams或接受Stream参数,这是JDK团队中某些人所认同的观点。考虑到Streams的实用性,我发现这过于局限。
关闭Streams的最佳做法是什么?我在网上寻找了一些JDK人员的答案,这些人员通常都积极参与类似的社区问题,但是没有发现任何相关的内容。