Проект

Общее

Профиль

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