首页 > 解决方案 > String Scanner java上的资源泄漏

问题描述

在 vscode 中,我收到一条警告,说 Scanner 存在用于扫描 String 的资源泄漏,但不需要关闭 String,那么为什么 vscode 会给我一个警告,我该如何摆脱它?我不想关闭扫描仪,因为那不是必需的。这是一些给出警告的示例代码

new Scanner("somthing to split")
            .useDelimiter(Pattern.compile("[ ,\n]"))
            .forEachRemaining(System.out::println);

Resource leak: '<unassigned Closeable value>' is not closed at this location

标签: javajava.util.scannerresource-leak

解决方案


VSCode 不关心您Scanner绑定到什么资源。它不会检查您是否真的应该关闭它。

通过使用try -with-resources 语法正确添加或关闭扫描程序来抑制警告@SuppressWarnings("resource")

try (Scanner scanner = new Scanner(...)) {
    ...
} // auto-closed here

并非所有警告实际上都是正确的,也有误报,在这种情况下完全可以抑制警告。您可能需要添加评论来解释原因

另一个相关示例是绑定到 的扫描仪System.in,它们也不应该关闭。


但这不会使其运行速度变慢吗?我试图不关闭它,因为它是不必要的,但我不想要这个警告

不,不是。即使,我们会在这里谈论几纳秒。不要试图对根本不需要优化的东西进行微优化。如果您认为您有速度问题,请分析您的应用程序,然后您会注意到您的违规者无论如何都是完全不同的。


推荐阅读