问题标签 [autocloseable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
703 浏览

java - AutoCloseable Iterator 是否应该从终结器关闭到 ResultSet 调用?

我有一个由 ResultSet 支持的迭代器。我需要它来进行行级后处理。迭代器实现 AutoCloseable 接口。连接保持打开状态,直到我们遍历所有被用户中断的行/迭代。如果迭代器的使用者显式调用 close() 方法或将迭代器的使用包装在 Java7 的 try 块中,那么一切都很好。但是,如果消费者不这样做,我不能保证连接将返回到池中。在 C# 世界中,我们会做一个终结器并从终结器调用 Dispose(bool) 作为后备选项。我们应该在 Java 中做同样的事情吗?

0 投票
1 回答
1369 浏览

java - 在 try-wtth-resources 块中使用 GZIPOutputStream 对象时是否需要调用 finish()

在 try-with-resources [autoclosable] 块内使用 GZipOutputStream 时,是否需要finish()在完成资源后显式调用?

0 投票
2 回答
444 浏览

java - Java - ScheduledExecutorService:在终止时执行任务

我使用ScheduledExecutorService以固定速率执行任务。这是我的主要方法的内容:

RemoteSync实现了AutoCloseable(and Runnable) 接口,所以我最初使用try-with-resources的是 ,像这样:

但是updater.startService()在调度任务后立即返回,因此updater.close()被提前调用并且应用程序退出。

下面是startService()方法RemoteSync

理想情况下,我想要一种方法,例如:

这将允许我close()在调度程序实际停止时调用,不幸的是我不知道这种方法。

我能做的是阻止该startService()方法,如下所示:

但这感觉肮脏和骇人听闻。

欢迎任何建议。

0 投票
4 回答
56372 浏览

java - 使用 AutoCloseable (try-with-resources) 关闭多个资源

我知道如果资源已实现 AutoCloseable,您尝试传递的资源将自动关闭。到目前为止,一切都很好。但是,当我有几个想要自动关闭的资源时,我该怎么办。带有套接字的示例;

所以我知道socket会正常关闭,因为在try中是作为参数传递的,但是应该如何正确关闭输入输出呢?

0 投票
3 回答
788 浏览

java - 如何使用锁包装器进行自动关闭?

我写了以下wrapepr:

在我的代码中,我这样使用它:

我不想在每种方法中创建包装器。

有没有办法结合单个包装器并尝试使用资源?

0 投票
1 回答
134 浏览

java.util.scanner - 自动关闭不适用于扫描仪

不工作。

输出是:

输入字符串:
wewew
输入要搜索的模式:
线程“main”中的异常 java.util.NoSuchElementException:

org.test.RegTest.readLine(RegTest. java:39)
在 org.test.RegTest.main(RegTest.java:22)

0 投票
1 回答
499 浏览

java - 定义自己的 XMLEventReader 来实现 Closeable 接口

我想将 try-with-resources 与XMLEventReader.

正如我发现的那样,XMLEventReader它只是一个接口,而我从中获得的对象XMLInputFactory.newInstance().createXMLEventReader(stream)com.sun.xml.internal.stream.XMLEventReaderImpl该类的。

通常我会扩展那个类来实现Closeable. 但我无法访问它(我无法在我的 IDE 中打开它)。
我在网上找到了它的代码。但我不愿意将它复制到一个新的类,只是为了让它可以关闭。

那么为什么我不能访问该课程以及制作课程的最佳解决方案是Closeable XMLEventReader什么?

0 投票
1 回答
1981 浏览

java - Java中如何保证Closeable接口的close()方法的幂等性?

Closeable接口是在 Java 5 中引入的,而该接口与语句AutoCloseable一起出现在 Java 7中。扩展(从 Java 7 开始)接口。try-with-resourcesCloseableAutocloseable

OCA/OCP Java SE 7 - Programmer I & II Study Guide一书中,它在第 399 页上说:

如果我们调用close()多次会发生什么?这取决于。对于实现AutoCloseable的类,要求实现是幂等的。这意味着您可以close()整天打电话,第二次及以后不会发生任何事情。[...] 对于实现 的类,Closeable没有这样的保证。

因此,根据本文,实现AutoCloseable需要是幂等的,而那些Closeable不是。现在,当我查看AutoCloseabledocs.oracle.com 上的界面文档时,它说:

请注意,与 的close方法不同Closeable,此关闭方法不需要是幂等的。换句话说,close多次调用此方法可能会产生一些可见的副作用,Closeable.close这与多次调用必须没有效果不同。

现在这与书中所写的相反。我有两个问题:

(1) 什么是正确的?docs.oracle.com 上的文档还是书?这两个接口中的哪一个需要幂等性?

(2)无论哪一个需要幂等 - 我是对的,Java实际上根本没有办法确保它是幂等的吗?如果是这样,close幂等方法的“要求”是程序员应该做的事情,但我永远不能确定使用该接口的人确实做到了,对吧?在这种情况下,幂等性只是预言机的一个建议,对吗?

0 投票
2 回答
1274 浏览

java - Autocloseable 的 Java 代理(Jedis 资源)

我试图找出是否可以创建 Java 动态代理来自动关闭 Autocloseable 资源,而不必记住使用 try-resources 块嵌入此类资源。

例如,我有一个 JedisPool,它有一个 getResource 方法,可以像这样使用:

现在我做了这样的事情:

现在,每次我在 Jedis (JedisCommands) 上调用方法时,此方法都会传递给代理,该代理从池中获取新客户端,执行方法并将此资源返回到池中。

它工作正常,但是当我想在客户端上执行多个方法时,每个方法的资源都从池中取出并再次返回(这可能很耗时)。你知道如何改进吗?

0 投票
2 回答
491 浏览

java - java.nio.file.Files.write(...) 安全吗?

java.nio.file.Files.write(...)方法抛出 IOException

我不能用它

建造。

它是否“自动关闭”并且在异常情况下安全?