不会关闭一个字符串写入器导致泄漏?

Bla*_*man 33 java memory-management freemarker stringwriter

我意识到在java中GC最终会清理对象,但是我问是不是关闭你的字符串编写器是不好的做法,目前我这样做:

 private static String processTemplate(final Template template, final Map root) {
        StringWriter writer = new StringWriter();
        try {
            template.process(root, writer);
        } catch (TemplateException e) {
            logger.error(e.getMessage());
        } catch (IOException e) {
            logger.error(e.getMessage());
        }
        finally {

        }

        return writer.toString();
    }
Run Code Online (Sandbox Code Playgroud)

我应该关闭编写器并创建一个像这样的新String:

String result = "";

...

finally {
  result = writer.toString();
  writer.close();
}
Run Code Online (Sandbox Code Playgroud)

这样做更好吗?

ass*_*ias 72

javadoc的是比较明确:

关闭StringWriter无效.

快速查看代码就可以确认:

public void close() throws IOException {
}
Run Code Online (Sandbox Code Playgroud)

  • `close()`什么都不做,抛出`IOException` :) (7认同)
  • 它不会抛出 IOException。它表明它可以抛出异常,但它不会。 (4认同)

Jam*_*ran 6

它不持有任何非内存资源。它将像其他任何东西一样被垃圾收集。close() 可能只是因为其他编写器对象确实持有需要清理的资源而存在,并且需要 close() 来满足接口。