1. Почему если объявить поток записи сразу после потоков считывания, то работа будет некорректной? 2. Почему в похожей задаче com.javarush.task.task18.task1818 (код прикреплю в комментарий) у нас после записи первого файла, второй записывается корректно, без затирания, а в текущей задачи при таком же решении всё ломается? 3. Как работает строка 18 и 20? Как мы в int без цикла записываем по факту весь массив? 4. Как устроена строка 24 и 25. Почему нельзя обойтись такой же записью, как из задачи во 2 пункте (см. комментарий) Заранее всех благодарю за уделенное время!
package com.javarush.task.task18.task1819;

/*
Объединение файлов
*/

import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String file1Name = reader.readLine();
        String file2Name = reader.readLine();
        FileInputStream file1InputStream = new FileInputStream(file1Name);
        FileInputStream file2InputStream = new FileInputStream(file2Name);

        byte[] file1bytes = new byte[file1InputStream.available()];
        int one = file1InputStream.read(file1bytes); // ?
        byte[] file2bytes = new byte[file2InputStream.available()];
        int two = file2InputStream.read(file2bytes);


        FileOutputStream file1OutputStream = new FileOutputStream(file1Name);  //почему нельзя объявить в начале?
        file1OutputStream.write(file1bytes, 0, two);   //почему без цикла??
        file1OutputStream.write(file2bytes, 0, one);

        reader.close();
        file1InputStream.close();
        file2InputStream.close();
        file1OutputStream.close();
    }
}