这真的是资源泄漏

时间:2016-08-11 00:29:38

标签: java nio

FileOutputStream fos = new FileOutputStream(f, true);
FileChannel fileChannel = fos.getChannel();
FileWriter fileWriter = Channels.newWriter( fileChannel, Charset.forName("UTF-8").newEncoder(), -1 );
....
fileWriter.close()

我收到一个编译器警告,因为'fos'没有关闭,我有资源泄漏。我假设,但到目前为止未能证明,当我调用'fileWriter.close()'时,资源被清除。

1 个答案:

答案 0 :(得分:3)

不,它不是资源泄漏,但编译器不够聪明,无法解决这个问题。

当您关闭FileWriter时,会关闭FileChannel,然后关闭FileOutputStream

当然,这可能与不同的JVM不同。我只看了Oracle的Java8 rt.jar中的代码。

由于它未作为FileWriter公共合同的一部分声明,因此明确关闭您创建的所有流最好。