Написал программу, которая расщепляет файл любого размера с буферизацией. У меня на машине разделила файл 1.2Гб за 35 секунд. Но валидатору что-то не нравится, якобы программа работает слишком долго. На маленький файлах все работает за миллисекунды, очевидно. Где тут ошибка или как скормить такое решение валидатору? Спасибо.
package com.javarush.task.task18.task1808;

/*
Разделение файла
*/


import java.io.*;

public class Solution {

    final static int BUFFER_SIZE = 1024 * 10; //Размер буфера

    public static void main(String[] args) throws IOException {
        //Читаем имена файлов
        String fileName1 = null, fileName2 = null, fileName3 = null;
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
            fileName1 = reader.readLine();
            fileName2 = reader.readLine();
            fileName3 = reader.readLine();
        } catch (IOException e) {
            System.out.println("Ошибка ввода имени файла");
        }

        long halfOfFile = (new File(fileName1).length() + 1) / 2; //Кол-во байт которое нужно записать во второй файл
        File file2 = new File(fileName2);
        //Создаем потоки с нашим размером буфера
        BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(fileName1), BUFFER_SIZE);
        BufferedOutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(fileName2), BUFFER_SIZE);
        BufferedOutputStream outputStream2 = new BufferedOutputStream(new FileOutputStream(fileName3), BUFFER_SIZE);

        long startTime = System.currentTimeMillis(); //Для замера скорости работы программы

        byte[] buffer = new byte[BUFFER_SIZE]; //массив, куда записываются считанные байты
        int count; //кол-во байт которое вернул метод read
        while ((count = inputStream.read(buffer)) != -1) {
            if (file2.length() + count < halfOfFile) outputStream1.write(buffer, 0, count);
            else if (file2.length() < halfOfFile) {
                long length = file2.length();
                outputStream1.write(buffer, 0, (int) (halfOfFile - length));
                outputStream1.flush();
                outputStream2.write(buffer, (int) (halfOfFile - length), (int) (count - (halfOfFile - length)));
            }
            else outputStream2.write(buffer, 0, count);
        }
        outputStream1.flush();
        outputStream2.flush();


        //для тестирования выводим время и кол-во байт во всех трех файлах
        long endTime = System.currentTimeMillis();
        System.out.println("Время на чтение и запись: " + (endTime - startTime)/1000 + " сек");
        System.out.println("Размер исходного, 1-го и 2-го файла " +
                new File(fileName1).length() + " " + new File(fileName2).length() + " " + new File(fileName3).length());

        inputStream.close();
        outputStream1.close();
        outputStream2.close();
    }
}