Inputstream和Outputstream,读取文件列表

时间:2011-04-26 15:39:37

标签: java inputstream fileoutputstream

我有这个ArrayList文件

for(File file : files){

    InputStream in = FileInputStream(file);
    // process each file and save it to file
    OutputStream out = FileOutputStream(file);
    try{

    } finally {
       in.close();
       out.close();
    }
}

性能非常慢,因为每个循环都有一个输入/输出close(),有更好的方法吗?我试图把循环的outputstream oustide,它不起作用。

3 个答案:

答案 0 :(得分:1)

关闭()最多可能需要20毫秒。我怀疑这是你的程序,除非你有1000个文件。

我怀疑你的性能问题是缺乏缓冲输入和输出。你能展示你的缓冲包装吗?

答案 1 :(得分:1)

使用缓冲流会产生巨大的差异。

试试这个:

for(final File file : files) {

    final InputStream in = new BufferedInputStream(new FileInputStream(file));
    final OutputStream out = new BufferedOutputStream(new FileOutputStream(new File(...)));
    try {
        // Process each file and save it to file
    }
    finally {
        try {
            in.close();
        }
        catch (IOException ignored) {}
        try {
            out.close();
        }
        catch (IOException ignored) {}
    }
}

请注意,必须忽略关闭流时可以抛出的IOException,否则您将丢失潜在的初始异常。

另一个问题是两个流都在同一个文件上,这不起作用。所以我想你正在使用两个不同的文件。

答案 2 :(得分:0)

您当然可以构建一个OutputStreams队列并将其卸载到后台线程,该后台线程处理这些输出流的关闭。对于InputStreams也是如此。 或者,您可以将其留给JVM来执行此操作 - 只需关闭文件并将其留给GC,以便在对象完成时执行此操作。