Самый быстрый способ написать несколько файлов в Java - PullRequest
0 голосов
/ 21 мая 2019

У меня есть требование, где мне нужно записать несколько входных потоков во временный файл в 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 МБ, для типичных файлов размером 45 МБ и 360 МБ этот метод занимает около 3 минут.в среднем.Можно ли это еще улучшить?

1 Ответ

0 голосов
/ 21 мая 2019

Вы можете попробовать BufferedInputStream

Как ответил @StephenC, в этом случае не имеет смысла использовать BufferedInputStream, потому что буфер достаточно большой.

Я воспроизвел поведение на моем компьютере (с SSD-накопителем). Я взял файл размером 100 МБ.

  • Для создания нового файла с этим примером потребовалось 110 мс.
  • С InputStreamBuffer и OutputStream = 120 мс.
  • С InputStream и OutputStreamBuffer = 120 мс.
  • С InputStreamBuffer и OutputStreamBuffer = 110 мс.

У меня не так много времени, как у вас.

Может проблема в твоем readerSuppliers?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...