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