我想要一个方法来返回 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/