у меня вопрос такого характера вот я понимаю как работает подобное чтение и запись в файл
BufferedReader reader = new BufferedReader (new InputStreamReader (System.in));

        FileOutputStream fileOutputStream1 = new FileOutputStream (reader.readLine (), true);
        FileInputStream fileInputStream2 = new FileInputStream (reader.readLine ());
        FileInputStream fileInputStream3 = new FileInputStream (reader.readLine ());
while (fileInputStream2.available () > 0) {
            int data = fileInputStream2.read ();
            fileOutputStream1.write (data);
        }
но это побайтого и ресурсоёмкое а вот это решение с буфером я не понимаю как происходит чтение и записи если мы это делаем без цикла особенно непонятно как работает byte[] buffer = new byte[fileInputStream2.available ()]; какая роль у записи fileInputStream2.available () как элемента массива
byte[] buffer = new byte[fileInputStream2.available ()];
        fileInputStream2.read (buffer);
        fileOutputStream1.write (buffer);
        fileInputStream2.close ();