用Java编写多个文件的最快方法

时间:2019-05-21 10:23:02

标签: java file io

我有必要在哪里将多个输入流写入Java中的临时文件。我有以下逻辑代码段。有没有更好的方法可以有效地做到这一点?

final String tempZipFileName = "log" + "_" + System.currentTimeMillis();
        File tempFile = File.createTempFile(tempZipFileName, "zip");
        final FileOutputStream oswriter = new FileOutputStream(tempFile);
        for (final InputStream inputStream : readerSuppliers) {
            byte[] buffer = new byte[102400];
            int bytesRead = 0;

            while ((bytesRead = inputStream.read(buffer)) > 0) {
                oswriter.write(buffer, 0, bytesRead);
            }
            buffer = null;
            oswriter.write(System.getProperty("line.separator").getBytes());
            inputStream.close();
        }

我有多个文件,大小从45到400 mb不等,对于典型的45 mb和360 mb的文件,此方法平均需要3分钟左右。可以进一步改善吗?

1 个答案:

答案 0 :(得分:-1)

您可以尝试BufferedInputStream

@StephenC回答,在这种情况下,使用BufferedInputStream并不重要,因为缓冲区足够大。

我在计算机(带有SSD驱动器)上重现了该行为。我拿了一个100MB的文件。

  • 使用此示例创建新文件花了110毫秒。
  • 具有InputStreamBuffer和OutputStream = 120 ms。
  • 使用InputStream和OutputStreamBuffer = 120 ms。
  • 具有InputStreamBuffer和 OutputStreamBuffer = 110毫秒。

我没有你那么长的执行时间。

问题可能出在您的readerSuppliers上吗?