我正在使用Sonar检查我的Java代码时,发现有一个问题。它建议我们使用`java.nio.file.Files.newInputStream(myfile.toPath())`而不是使用`new FileInputStream(file)`。Sonar的描述如下:
这个方法会创建并使用`java.io.FileInputStream`或者`java.io.FileOutputStream`对象。不幸的是,这两个类都实现了一个`finalize`方法,这意味着创建的对象很可能会一直存在,直到进行完整的垃圾回收。这将在堆上留下过多的垃圾,并且可能比预期的时间要长得多。Java 7引入了两种创建读写文件流的方式,它们没有这个问题。你应该考虑从上述类切换到以下方式:`InputStream is = java.nio.file.Files.newInputStream(myfile.toPath()); OutputStream os = java.nio.file.Files.newOutputStream(myfile.toPath());`
我的问题是,这个建议是否正确?
这个方法会创建并使用`java.io.FileInputStream`或者`java.io.FileOutputStream`对象。不幸的是,这两个类都实现了一个`finalize`方法,这意味着创建的对象很可能会一直存在,直到进行完整的垃圾回收。这将在堆上留下过多的垃圾,并且可能比预期的时间要长得多。Java 7引入了两种创建读写文件流的方式,它们没有这个问题。你应该考虑从上述类切换到以下方式:`InputStream is = java.nio.file.Files.newInputStream(myfile.toPath()); OutputStream os = java.nio.file.Files.newOutputStream(myfile.toPath());`
我的问题是,这个建议是否正确?