【问题标题】:Is file IOstream OK to be initialized every loop? [duplicate]文件 IOstream 是否可以在每个循环中初始化? [复制]
【发布时间】:2021-10-04 16:32:10
【问题描述】:
FileOutputStream st = null;

for(file_path:file_list)
{
 st = new FileOutputStream(file_path);
.
.
.

}
st.close();

我想知道的是 如果我没有关闭一个流并使用新实例对其进行初始化,是否会影响程序性能?

如果是这样,是不是因为最后一行的close()只关闭了最后创建的流,而之前的其他流都在等待GC清除自己?

提前感谢您的阅读。

【问题讨论】:

  • 老兄——总是“关闭”你“打开”的东西!否则可能会发生不好的事情:乱码/截断数据,潜在的资源泄漏等。另外:您应该熟悉 Java try-with-resources 块。

标签: java performance io


【解决方案1】:

您正在遍历文件路径列表。您绝对应该为每个文件路径创建一个新的FileOutputStream。您还应该关闭每个OutputStream。我会强烈建议您使用try-with-Resources 而不是手动关闭(并使用BufferedOutputStream 包装您的流)。喜欢,

for (String file_path : file_list) // I assume it's String(s)
{
    // Limit the stream visibility and program to OutputStream interface
    try (OutputStream st = new BufferedOutputStream(new FileOutputStream(file_path))) {
        // ...
    }
}

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多