JAVA IO STREAMS » История » Редакция 2
Редакция 1 (Александр Александров, 21.04.2019 00:21) → Редакция 2/3 (Александр Александров, 21.04.2019 02:45)
h1. JAVA IO STREAMS h2. Вопросы # Что такое символьная ссылка? # Какая разница между I/О и NIO? # Какие особенности NIO вы знаете? # Какие существуют виды потоков ввода/вывода? # Назовите основные классы потоков ввода/вывода. # Чем отличаются и что общего у OutputStream, InputStream, Writer, Reader? # Какие подклассы базового класса InputStream ви знаєте, для чего они предназначены? # Что вы знаете о RandomAccessFile? # Какие есть режимы доступа к файлу есть у RandomAccessFile ? # Какие подклассы базового класса OutputStream ви знаєте, для чего они предназначены? # Для чего используется PushbackInputStream? # Для чего используется SequenceInputStream? # Какие подклассы базового класса Reader ви знаєте, для чего они предназначены? # Какие подклассы базового класса Writer ви знаете, для чего они предназначены? # Что такое абсолютный путь и относительный путь? # В каких пакетах лежат классы-потоки? # Что вы знаете о классах-надстройках? # Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных? # Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера? # Какие классы позволяют преобразовать байтовые потоки в символьные и обратно? # В чем отличие класса PrintWriter от PrintStream? # Какой класс предназначен для работы с элементами файловой системы? # Какой символ является разделителем при указании пути в файловой системе? # Какие методы класса File ви знаете? # Что вы знаете об интерфейсе FileFilter? # Какие классы позволяют архивировать объекты? h2. Ответы h3. Что такое символьная ссылка? Символьная ссылка (Symbolic link, симлинк) - специальный файл в файловой системе, содержащий только текстовую строку с указателем. Эта строка трактуется как путь к файлу, который должен быть открыт при попытке обратиться к данному файлу. h3. Какая разница между I/О и NIO? *I/O* (input/output, ввод-вывод ) - взаимодействие между обработчиком информации и её поставщиком и/или получателем. Ввод - сигнал или данные, полученные обработчиком, а вывод - сигнал или данные, посланные им (или из него). *NIO* (в контексте Java Non-blocking I/O, New I/O) - коллекция прикладных программных интерфейсов для языка Java, предназначенных для реализации высокопроизводительных операций ввода-вывода. Также встречается аббревиатура NIO.2 - она относится к нововведениям относительно этого направления в Java 7. h3. Какие особенности NIO вы знаете? Ключевые особенности NIO: * Каналы и селекторы: NIO поддерживает различные типы каналов. Канал является абстракцией объектов более низкого уровня файловой системы (например, отображенные в памяти файлы и блокировки файлов), что позволяет передавать данные с более высокой скоростью. Каналы не блокируются и поэтому Java предоставляет еще такие инструменты, как селектор, который позволяет выбрать готовый канал для передачи данных, и сокет, который является инструментом для блокировки. * Буферы: в Java 7 была введена буферизация для всех классов-обёрток примитивов (кроме Boolean). Появился абстрактный класс Buffer, который предоставляет такие операции, как clear, Úip, mark и т.д. Его подклассы предоставляют методы для получения и установки данных. * Кодировки: в Java 7 появились кодировки (java.nio.charset), кодеры и декодеры для отображения байт и символов Unicode. h3. Какие существуют виды потоков ввода/вывода? Потоки ввода/вывода используются для передачи данных в файловые потоки, на консоль или на сетевые соединения. Существует два вида потоков ввода/вывода: байтовые и символьные. {{dmsf_image(232)}} h3. Назовите основные классы потоков ввода/вывода. Байтовые: _java.io.InputStream, java.io.OutputStream;_ Символьные: _java.io.Reader, java.io.Writer;_ h3. Чем отличаются и что общего у OutputStream, InputStream, Writer, Reader? Класс *OutputStream* - это абстрактный класс, определяющий потоковый байтовый вывод. В этой категории находятся классы, определяющие, куда направляются ваши данные: в массив байтов (но не напрямую в String; предполагается что вы сможете создать их из массива байтов), в файл или канал. Базовый класс InputStream представляет классы, которые получают данные из различных источников: * массив байтов * строка (String) * файл * канал (pipe): данные помещаются с одного конца и извлекаются с другого * последовательность различных потоков, которые можно объединить в одном потоке * другие источники (например, подключение к интернету) Символьные потоки имеют два основных абстрактных класса Reader и Writer, управляющие потоками символов Unicode. Класс Reader - абстрактный класс, определяющий символьный потоковый ввод. Класс Writer - абстрактный класс, определяющий символьный потоковый вывод. В случае ошибок все методы класса передают исключение IOException. h3. Какие подклассы базового класса InputStream ви знаєте, для чего они предназначены? Подклассы базового класса InputStream: * StringBufferInputStream - превращает строку (String) во входной поток данных InputStream. * SequenceInputStream - сливает два или более потока InputStream в единый поток. * PushbackInputStream - входной поток, поддерживающий однобайтовый возврат во входной поток. * PrintStream - выходной поток, включающий методы print() и println(). PipedInputStream - реализует понятие входного канала. * ObjectInputStream - входной поток для объектов. * InputStream - абстрактный класс, описывающий поток ввода. * FilterInputStream - абстрактный класс, предоставляющий интерфейс для классов-надстроек, которые добавляют к существующим потокам полезные свойства. * FileInputStream - для чтения информации из файла. * DataInputStream - входной поток, включающий методы для чтения стандартных типов данных Java. * ByteArrayInputStream - позволяет использовать буфер в памяти (массив байтов) в качестве источника данных для входного потока. * BufferedInputStream - буферизированный входной поток. h3. Что вы знаете о RandomAccessFile? RandomAccessFile это класс который наследуется напрямую от Object и не наследуется от вышеприведенных базовых классов ввода\вывода. Предназначен для работы с файлами, поддерживая произвольный доступ к их содержимому. Работа с классом RandomAccessFile напоминает использование совмещенных в одном классе потоков DataInputStream и DataOutputStream (они реализуют те же интерфейсы DataInput и DataOutput). Кроме того, метод seek() позволяет переместиться к определенной позиции и изменить хранящееся там значение. При использовании RandomAccessFile необходимо знать структуру файла. Класс RandomAccessFile содержит методы для чтения и записи примитивов и строк UTF-8. h3. Какие есть режимы доступа к файлу есть у RandomAccessFile ? *RandomAccessFile* может открываться в режиме чтения ("r") или чтения/записи ("rw"). Также есть режим "rws", когда файл открывается для операций чтения-записи и каждое изменение данных файла немедленно записывается на физическое устройство. h3. Какие подклассы базового класса OutputStream ви знаєте, для чего они предназначены? Класс OutputStream - это абстрактный класс, определяющий потоковый байтовый вывод. В этой категории находятся классы, определяющие, куда направляются ваши данные: в массив байтов (но не напрямую в String; предполагается что вы сможете создать их из массива байтов), в файл или канал. Подклассы базового класса OutputStream: * PipedOutputStream - реализует понятие выходного канала. * ObjectOutputStream - выходной поток для объектов * FilterOutputStream - абстрактный класс, предоставляющий интерфейс для классов-надстроек, которые добавляют к существующим потокам полезные свойства. * FileOutputStream - отправка данных в файл на диске. Реализация класса * OutputStream. * DataOutputStream - выходной поток, включающий методы для записи стандартных типов данных Java. * ByteArrayOutputStream - создает буфер в памяти. Все данные, посылаемые в этот поток, размещаются в созданном буфере. * BufferedOutputStream - буферизированный выходной поток. h3. Для чего используется PushbackInputStream? Разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток. Класс PushbackInputStream представляет механизм "заглянуть" во входной поток и увидеть, что оттуда поступит в следующий раз, не извлекая информации. У класса есть дополнительный метод unread() h3. Для чего используется SequenceInputStream? Класс SequenceInputStream позволяет соединять вместе несколько экземпляров класса InputStream. Конструктор принимает в качестве аргумента либо пару объектов класса InputStream, либо интерфейс Enumeration. Во время работы класс выполняет запросы на чтение из первого объекта класса InputStream и до конца, а затем переключается на второй. При использовании интерфейса работа продолжится по всем объектам класса InputStream. По достижении конца каждого файла, связанный с ним поток закрывается. Закрытие потока, созданного объектом класса SequenceInputStream, приводит к закрытию всех открытых потоков. h3. Какие подклассы базового класса Reader ви знаєте, для чего они предназначены? Подклассы базового класса Reader: * StringReader - входной поток, читающий из строки. * Reader - абстрактный класс, описывающий символьный ввод. * PushbackReader - входной поток, позволяющий возвращать символы обратно в поток. * PipedReader - входной канал. * LineNumberReader - входной поток, подсчитывающий строки. * InputStreamReader - входной поток, транслирующий байты в символы. * FilterReader - фильтрующий читатель. * FileReader - входной поток, читающий файл. * CharArrayReader - входной поток, который читает из символьного массива. * BufferedReader - буферизированный входной символьный поток h3. Какие подклассы базового класса Writer ви знаете, для чего они предназначены? h3. Что такое абсолютный путь и относительный путь? h3. В каких пакетах лежат классы-потоки? h3. Что вы знаете о классах-надстройках? h3. Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных? h3. Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера? h3. Какие классы позволяют преобразовать байтовые потоки в символьные и обратно? h3. В чем отличие класса PrintWriter от PrintStream? h3. Какой класс предназначен для работы с элементами файловой системы? h3. Какой символ является разделителем при указании пути в файловой системе? h3. Какие методы класса File ви знаете? h3. Что вы знаете об интерфейсе FileFilter? h3. Какие классы позволяют архивировать объекты?Go to top