public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // Считываеми что то с клавиатуры
        String name = reader.readLine(); // записываем это что то, что мы считали в name
        FileInputStream inStream = new FileInputStream(name); // создаем объект inStream типа FileInputStream и передаем в него name
        while (inStream.available() > 0){  //Пока количество байт доступных для чтения > 0, (но это значит?)
            int data = inStream.read();  // Записываем в data представление следующего доступного байта в потоке, если достигнут конец верентся (а это что значимт?)
            System.out.print((char)data); // Выводим на экран data, что такое char в этом коде?
        }
        inStream.close(); // закрывем потоки
        reader.close(); // закрывем потоки
    }
Что значат в этом коде, жирные строчки? Я просто списал с лекции, но догнать не могу, не понимаю некоторых фраз. Объясните пожалуйста популярно, как будто я самый тупой человек на земле. Мне кажется что в этих методах ключ к пониманию потоков, а я не могу их уловить.