Главная страница
Навигация по странице:

  • Что делает flush Почему важно закрывать потоки

  • Расскажи про классы Reader и Writer

  • Чем отличаются и что общего у InputStream, OutputStream, Reader, Writer

  • Какие подклассы класса Reader вы знаете, для чего они предназначены

  • Ревью 5. Что такое потоки вводавывода Как это реализовано в Java 3 Классынадстройки потоков вводавывода 4


    Скачать 110.73 Kb.
    НазваниеЧто такое потоки вводавывода Как это реализовано в Java 3 Классынадстройки потоков вводавывода 4
    АнкорРевью 5
    Дата24.12.2022
    Размер110.73 Kb.
    Формат файлаdocx
    Имя файлаРевью 5.docx
    ТипДокументы
    #861326
    страница4 из 13
    1   2   3   4   5   6   7   8   9   ...   13

    Что такое System.in, что такое System.out?


    Как вам должно быть уже известно, во все программы на Java автоматически импортируется пакет java. lang. В этом пакете определен класс System, инкапсулирующий некоторые элементы среды выполнения программ. Помимо прочего, в нем содержатся предопределенные переменные in, out и err, представляющие стандартные потоки ввода-вывода. Эти поля объявлены как public, final и static. А это означает, что ими можно пользоваться в любой другой части программы, не ссылаясь на конкретный объект типа System.

    Переменная System.out ссылается на поток стандартного вывода. По умолчанию этот поток связан с консолью. А переменная System, in ссылается на поток стандартного ввода (по умолчанию с клавиатуры). И наконец, переменная System.err ссылается на поток стандартных сообщений об ошибках, которые по умолчанию выводятся на консоль. По мере необходимости все эти потоки могут быть перенаправлены на другие совместимые устройства ввода-вывода.

    Поток System.in представляет собой объект типа InputStream, а потоки System.out и System.err — объекты типа PrintStream. Хотя эти потоки обычно используются для чтения и записи символов, они на самом деле являются байтовыми потоками. Дело в том, что эти потоки были определены в первоначальной спецификации Java, где символьные потоки вообще не были предусмотрены. Как станет ясно в дальнейшем, для этих потоков можно по необходимости создать оболочки, превратив их в символьные потоки.

    Что делает flush?  Почему важно закрывать потоки?


    Методы, определенные в классе Writer

    abstract void flush() - Выводит текущее содержимое буфера на устройство. В результате выполнения данной операции буфер очищается/

    Методы, определенные в классе OutputStream

    void flush() - Выводит содержимое выходного буфера вывода в целевой поток. По завершении этой операции выходной буфер очищается

    При закрытии файла освобождаются связанные с ним системные ресурсы, чтобы использовать их для работы с другим файлом. Если же файл не будет закрыт, могут произойти “утечки памяти” из-за того, что часть памяти остается выделенной для неиспользуемых ресурсов.

    Есть два способа закрытия файла. Первый традиционный заключается в использовании блока try..catch..finally.

    Поскольку при открытии или считывании файла может произойти ошибка ввода-вывода, то код считывания помещается в блок try. И чтобы быть уверенным, что поток в любом случае закроется, даже если при работе с ним возникнет ошибка, вызов метода close() помещается в блок finally. И, так как метод close() также в случае ошибки может генерировать исключение IOException, то его вызов также помещается во вложенный блок try..catch

    Начиная с Java 7 можно использовать еще один способ, который автоматически вызывает метод close. Этот способ заключается в использовании конструкции try-with-resources (try-с-ресурсами). Данная конструкция работает с объектами, которые реализуют интерфейс AutoCloseable. Так как все классы потоков реализуют интерфейс Closeable, который в свою очередь наследуется от AutoCloseable, то их также можно использовать в данной конструкции.

    Расскажи про классы Reader и Writer?


    Для определения символьных потоков служат две иерархические структуры классов, на вершине которых находятся абстрактные классы Reader и Writer соответственно. Класс Reader и его подклассы используются для чтения, а класс Writer и его подклассы — для записи данных. Конкретные классы, производные от классов Reader и Writer, оперируют символами в уникоде.

    Классы, производные от классов Reader и Writer, предназначены для выполнения различных операций ввода-вывода символов. Символьные классы присутствуют в Java параллельно с байтовыми классами.

    Чем отличаются и что общего у InputStream, OutputStream, Reader, Writer?


    InputStream и его наследники - совокупность для получения байтовых данных из различных источников;

    OutputStream и его наследники - набор классов, определяющих потоковый байтовый вывод;

    Reader и его наследники определяют потоковый ввод символов Unicode;

    Writer и его наследники определяют потоковый вывод символов Unicode.

    Какие подклассы класса Reader вы знаете, для чего они предназначены?


    Reader - абстрактный класс, описывающий символьный ввод;

    BufferedReader - буферизованный входной символьный поток;

    CharArrayReader - входной поток, который читает из символьного массива;

    FileReader - входной поток, читающий файл;

    FilterReader - абстрактный класс, предоставляющий интерфейс для классов-надстроек;

    InputStreamReader- входной поток, транслирующий байты в символы;

    LineNumberReader - входной поток, подсчитывающий строки;

    PipedReader - входной канал;

    PushbackReader - входной поток, позволяющий возвращать символы обратно в поток;

    StringReader - входной поток, читающий из строки.
    1   2   3   4   5   6   7   8   9   ...   13


    написать администратору сайта