java - 创建 BufferedReaders 列表

标签 java stream io

我想要一个方法来返回 BufferedReader 对象的列表(例如目录中的所有文件):

private List<BufferedReader> getInputReaders(List<String> filenames) {
    List<BufferedReader> result = new ArrayList<BufferedReader>();
    for(String filename : filenames)
        result.add(new BufferedReader(new InputStreamReader(new FileInputStream(filename), "UTF-8")));
    }
    return result;
}

这会不会造成资源浪费?

所有这些流是否会在创建时打开并保持打开状态从而占用系统资源?

如果是,我是否可以在“被动”模式下创建这些阅读器而不实际打开流,或者是否有任何其他解决方法(以便我可以安全地构建包含数千个阅读器的列表)?

最佳答案

是的,FileInputStream 的构造函数在其构造函数中调用了 open()open() 是一个本地方法,很可能会为文件保留一个文件描述符。

与其立即返回一个 BufferedReader 列表,不如返回一个将根据需要打开底层流的列表?您可以创建一个保存文件名的类,并在调用时简单地打开资源。

关于java - 创建 BufferedReaders 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7215721/

相关文章:

java - 使用 Hystrix Feign 记录请求和响应 json 负载

java在mysql中插入特殊字符

c - 我们可以在 `fdopen()` 中指定哪些类型,以及该类型的哪一部分是有效的?

java - 在 JavaFX 中制作视频(媒体)播放器占用尽可能多的空间,但不能超过

java - 如何使用 JPA 2、Hibernate 3.5 处理选择字段

stream - 无缓冲 CXF(无内容长度 header )

c++ - C++11 中流的 vector

c++ - 使用同一个对象写入宽字符和字符写入同一个文件

c++ - 有没有办法在使用 GLFW 按下一个键后只处理一个输入事件?

java - 显示输出不符合预期