如果我们使用Java 8 Stream,例如list.stream().filter(....).collect(..).....
何时关闭此流?
作为下一个示例,我们关闭流是不是一个好习惯?
Stream<String> stream = list.stream();
String result = stream.limit(10).collect(Collectors.joining(""));
stream.close();
通常根本不需要关闭流。您只需要关闭使用IO资源的流。
从Stream文档中:
流具有
BaseStream.close()
方法和实现AutoCloseable
,但是实际上几乎所有流实例在使用后都不需要关闭。通常,只有源是IO通道的流(例如由返回的Files.lines(Path, Charset)
)才需要关闭。大多数流都由集合,数组或生成函数支持,而无需特殊的资源管理。(如果流确实需要关闭,则可以在try-with-
resources语句中将其声明为资源。)
如果 您需要关闭流,那么最佳实践是使用try-with-resources语句:
try ( Stream<String> stream = Files.lines(path, charset) ) {
// do something
}
我是java8的新手。 我有以下课程。 我能够保存这个在mongo收集: 现在,我得出了基于spring mongo数据存储库的结果。我想迭代上面的mongo集合,这样我只能得到我尝试过的以下车辆列表: 请帮助我了解java8。提前谢谢
问题内容: 假设我有一个Java8 ,并且使用了该流,那么如何控制流中使用的s 的关闭? 请注意,我可能无权访问个人,例如: 在进行了其他一些映射等之后,我终于在续集中失去了。 我首先认为垃圾收集器可以在需要时执行此操作,但是当它很长时,我已经经历了OS描述符耗尽。 问题答案: 关于使用FileReader的一般注意事项:FileReader在内部使用FileInputStream,它会覆盖并且因
嗨,我只知道这是一个古老的问题,但今天只是好奇。正如我们所知connection.close也会关闭preared语句(如果我错了请纠正我)。但是如果我关闭连接然后关闭preared语句会怎样 我会得到一个空指针异常吗? 有人说这取决于jvm的速度。有时,ps.close()会在conn.close完成其工作之前运行并首先关闭,因此您不会得到null指针。 为了测试它,我修改了代码 但是我没有得到
问题内容: 我想知道如果不手动关闭流,何时关闭。我的意思是,如果引用的范围不再存在,流将被关闭吗? 请考虑以下示例方案。 在这里,一旦完成流处理,我将退出,但是反过来将继续执行该程序的程序不会终止,而是继续进行其他操作。 我没有关闭溪流。一旦对A类的引用范围结束,它会自动关闭吗?(即何时结束)?GC会照顾吗?另外,我读到,一旦流程结束,流将关闭,并且系统释放为其他进程保留的所有资源。我们如何检查流
问题内容: 我已经实现了 使用资源的自定义 java.util.Iterator ,该资源应在使用方法的最后释放。该资源可以是 java.sql.ResultSet , java.io.InputStream 等。 使用此迭代器的某些外部库可能不知道必须关闭它。例如: 在这种情况下,有没有办法关闭此迭代器? 更新: 非常感谢您提供当前的答案。我给每个人一个(+1)。当 hasNext() 返回fa
问题内容: 今天,我第一次在本地计算机上启动Redis,然后在关闭Rails应用程序后关闭了所有终端窗口。一个小时后,我再次启动Rails应用程序,并执行以下操作来启动Redis服务器 但是,它告诉我 因此,即使关闭了Mac上的终端窗口,我也认为它仍在运行其较早的实例。 看着这个页面http://redis.io/commands/shutdown,我试图运行 在终端窗口中,但我收到此响应 因此,
我对ExecutorService的javadoc#shutdown方法感到困惑。这些说法不矛盾吗? 启动有序关闭,其中执行以前提交的任务,但不接受新任务。此方法不会等待以前提交的任务完成执行。使用waitTersion执行此操作。 如果它能有序地关闭之前提交的任务,那么它怎么能等它们完成执行呢?
我已经实现了HikariCP,它工作得很好,我现在计划优雅地关闭我的应用程序,我想让HikariCP正确地关闭数据库连接,而不仅仅是关闭java应用程序。我在谷歌上阅读,我可以看到HikariDataSource应该有一个封闭的方法。。。。但事实上,我看不到它的可用性: 在Eclipse中,如果我尝试ds。close()。。。Eclipse没有显示“close”作为HikariDataSource