Project

General

Profile

Actions

JAVA IO STREAMS » History » Revision 2

« Previous | Revision 2/3 (diff) | Next »
Александр Александров, 04/21/2019 02:45 AM


JAVA IO STREAMS

Вопросы

  1. Что такое символьная ссылка?
  2. Какая разница между I/О и NIO?
  3. Какие особенности NIO вы знаете?
  4. Какие существуют виды потоков ввода/вывода?
  5. Назовите основные классы потоков ввода/вывода.
  6. Чем отличаются и что общего у OutputStream, InputStream, Writer, Reader?
  7. Какие подклассы базового класса InputStream ви знаєте, для чего они предназначены?
  8. Что вы знаете о RandomAccessFile?
  9. Какие есть режимы доступа к файлу есть у RandomAccessFile ?
  10. Какие подклассы базового класса OutputStream ви знаєте, для чего они предназначены?
  11. Для чего используется PushbackInputStream?
  12. Для чего используется SequenceInputStream?
  13. Какие подклассы базового класса Reader ви знаєте, для чего они предназначены?
  14. Какие подклассы базового класса Writer ви знаете, для чего они предназначены?
  15. Что такое абсолютный путь и относительный путь?
  16. В каких пакетах лежат классы-потоки?
  17. Что вы знаете о классах-надстройках?
  18. Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
  19. Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
  20. Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
  21. В чем отличие класса PrintWriter от PrintStream?
  22. Какой класс предназначен для работы с элементами файловой системы?
  23. Какой символ является разделителем при указании пути в файловой системе?
  24. Какие методы класса File ви знаете?
  25. Что вы знаете об интерфейсе FileFilter?
  26. Какие классы позволяют архивировать объекты?

Ответы

Что такое символьная ссылка?

Символьная ссылка (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.

Какие существуют виды потоков ввода/вывода?

Потоки ввода/вывода используются для передачи данных в файловые потоки, на консоль или на сетевые соединения. Существует два вида потоков ввода/вывода: байтовые и символьные.

input output stream

Назовите основные классы потоков ввода/вывода.

Байтовые: 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?

Какие классы позволяют архивировать объекты?

Updated by Александр Александров about 5 years ago · 2 revisions

Go to top