当前位置: 首页 > 面试题库 >

为什么Java 8 Stream类可以自动关闭?

锺英卫
2023-03-14
问题内容

在Java 8中,Stream类实现AutoCloseable。这意味着应显式关闭流实例。

我了解为什么文件处理程序和数据库连接是可关闭的。但是为什么要流?


问题答案:

我认为Stream的当前文档/
javadoc
非常清楚:

流具有BaseStream.close()方法并实现AutoCloseable,但是实际上几乎所有流实例在使用后都不需要关闭。通常,只有源是IO通道的流(例如,由Files.lines(Path,Charset)返回的流)才需要关闭。大多数流都由集合,数组或生成函数支持,而无需特殊的资源管理。(如果流确实需要关闭,则可以在try-
with-resources语句中将其声明为资源。)



 类似资料:
  • 在Java 8中,流类实现了自动关闭。这意味着应该显式关闭流实例。 我理解为什么文件处理程序和数据库连接是可关闭的。但为什么是流呢?

  • 问题内容: 是否可以自动关闭?即,代替: …我能说......么: …在Java 7中? 问题答案: 不,该接口(也不是该类)都未实现该接口,而新的try- with-resource语法必须使用该接口。 如果您想使其工作,可以编写一个简单的包装器: 现在您可以编写如下代码: 我认为您最好还是坚持使用旧语法。使锁定逻辑完全可见是更安全的。

  • 流状态的javadoc: 流具有基流。方法并实现自动关闭,但几乎所有流实例在使用后实际上都不需要关闭。通常,只有源为IO通道的流(例如由文件行(路径,字符集)返回的流)才需要关闭。大多数流由集合、数组或生成函数支持,不需要特殊的资源管理。(如果流确实需要关闭,则可以在try with resources语句中将其声明为资源。) 因此,在绝大多数情况下,可以在一个线性规划中使用流,如集合。strea

  • 问题内容: 当我执行一些go实践代码时,遇到一个问题,通道可以关闭两次,如下所示: 输出: 但是,当我手动关闭通道两次时,我得到了。 为什么上面的代码可以两次关闭? 问题答案: 一个通道只能关闭一次,尝试关闭一个已关闭的通道紧急情况。 但接收从封闭通道没有限制,从关闭信道接收: 封闭通道上的接收操作始终可以立即进行,在接收到任何先前发送的值之后,得出元素类型的零值。 Go应用程序运行直到其主要go

  • 问题内容: 我刚刚意识到DBUnit本身不会创建表(请参阅如何在不面对NoSuchTableException的情况下使用具有普通JDBC和HSQLDB的DBUnit进行测试?)。 DBUnit有什么方法可以根据数据集或dtd自动创建表吗? 编辑: 为了简单测试像HSQLDB这样的内存数据库,可以使用粗略的方法来自动创建表: 问题答案: 并不是的。正如您链接的答案所指出的那样,dbunit xml

  • 我们知道我们可以将null赋给可为null的类型。例如: 我们知道第二种说法是有效的,因为有人告诉我们它是有效的,我们只是接受它,而不问为什么。但如果查看的源代码,则为: 我们可以将赋给为的原因是由于隐式运算符,它允许您隐式强制转换int为。根据隐式运算符的规则,作为的右手边,必须是结构类型,但显然不是合法的结构值,那么如何做(更不用说本身就是一个结构),为什么不违反隐式运算符规则