Проект

Общее

Профиль

JAVA IO STREAMS » История » Версия 2

Александр Александров, 21.04.2019 02:45

1 1 Александр Александров
h1. JAVA IO STREAMS
2
3
h2. Вопросы
4
5
# Что такое символьная ссылка?
6
# Какая разница между I/О и NIO?
7
# Какие особенности NIO вы знаете?
8
# Какие существуют виды потоков ввода/вывода?
9
# Назовите основные классы потоков ввода/вывода.
10
# Чем отличаются и что общего у OutputStream, InputStream, Writer, Reader?
11
# Какие подклассы базового класса InputStream ви знаєте, для чего они предназначены?
12
# Что вы знаете о RandomAccessFile?
13
# Какие есть режимы доступа к файлу есть у RandomAccessFile ?
14
# Какие подклассы базового класса OutputStream ви знаєте, для чего они предназначены?
15
# Для чего используется PushbackInputStream?
16
# Для чего используется SequenceInputStream?
17
# Какие подклассы базового класса Reader ви знаєте, для чего они предназначены?
18
# Какие подклассы базового класса Writer ви знаете, для чего они предназначены?
19
# Что такое абсолютный путь и относительный путь?
20
# В каких пакетах лежат классы-потоки?
21
# Что вы знаете о классах-надстройках?
22
# Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
23
# Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
24
# Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
25
# В чем отличие класса PrintWriter от PrintStream?
26
# Какой класс предназначен для работы с элементами файловой системы?
27
# Какой символ является разделителем при указании пути в файловой системе?
28
# Какие методы класса File ви знаете?
29
# Что вы знаете об интерфейсе FileFilter?
30
# Какие классы позволяют архивировать объекты?
31
32
h2. Ответы
33
34
h3. Что такое символьная ссылка?
35
36 2 Александр Александров
Символьная ссылка (Symbolic link, симлинк) - специальный файл в файловой системе, содержащий только текстовую строку с указателем. Эта строка трактуется как путь к файлу, который должен быть открыт при попытке обратиться к данному файлу.
37
38 1 Александр Александров
h3. Какая разница между I/О и NIO?
39
40 2 Александр Александров
*I/O* (input/output, ввод-вывод ) - взаимодействие между обработчиком информации и её поставщиком и/или получателем. Ввод - сигнал или данные, полученные обработчиком, а вывод - сигнал или данные, посланные им (или из него).
41
42
*NIO* (в контексте Java Non-blocking I/O, New I/O) - коллекция прикладных программных интерфейсов для языка Java, предназначенных для реализации высокопроизводительных операций ввода-вывода. Также встречается аббревиатура NIO.2 - она относится к нововведениям относительно этого направления в Java 7.
43
44 1 Александр Александров
h3. Какие особенности NIO вы знаете?
45
46 2 Александр Александров
Ключевые особенности NIO:
47
48
* Каналы и селекторы: NIO поддерживает различные типы каналов. Канал является абстракцией объектов более низкого уровня файловой системы (например, отображенные в памяти файлы и блокировки файлов), что позволяет передавать данные с более высокой скоростью. Каналы не блокируются и поэтому Java предоставляет еще такие инструменты, как селектор, который позволяет выбрать готовый канал для передачи данных, и сокет, который является инструментом для блокировки.
49
* Буферы: в Java 7 была введена буферизация для всех классов-обёрток примитивов (кроме Boolean). Появился абстрактный класс Buffer, который предоставляет такие операции, как clear, Úip, mark и т.д. Его подклассы предоставляют методы для получения и установки данных.
50
* Кодировки: в Java 7 появились кодировки (java.nio.charset), кодеры и декодеры для отображения байт и символов Unicode.
51
52 1 Александр Александров
h3. Какие существуют виды потоков ввода/вывода?
53
54 2 Александр Александров
Потоки ввода/вывода используются для передачи данных в файловые потоки, на консоль или на сетевые соединения. Существует два вида потоков ввода/вывода: байтовые и символьные.
55
56
{{dmsf_image(232)}}
57
58 1 Александр Александров
h3. Назовите основные классы потоков ввода/вывода.
59
60 2 Александр Александров
Байтовые: _java.io.InputStream, java.io.OutputStream;_
61
Символьные: _java.io.Reader, java.io.Writer;_
62
63 1 Александр Александров
h3. Чем отличаются и что общего у OutputStream, InputStream, Writer, Reader?
64
65 2 Александр Александров
Класс *OutputStream* - это абстрактный класс, определяющий потоковый байтовый вывод. В этой категории находятся классы, определяющие, куда направляются ваши данные: в массив байтов (но не напрямую в String; предполагается что вы сможете создать их из массива байтов), в файл или канал.
66
67
Базовый класс InputStream представляет классы, которые получают данные из различных источников:
68
69
* массив байтов
70
* строка (String)
71
* файл
72
* канал (pipe): данные помещаются с одного конца и извлекаются с другого
73
* последовательность различных потоков, которые можно объединить в одном потоке
74
* другие источники (например, подключение к интернету)
75
76
Символьные потоки имеют два основных абстрактных класса Reader и Writer, управляющие потоками символов Unicode. Класс Reader - абстрактный класс, определяющий символьный потоковый ввод. Класс Writer - абстрактный класс, определяющий символьный потоковый вывод. В случае ошибок все методы класса передают исключение IOException.
77
78 1 Александр Александров
h3. Какие подклассы базового класса InputStream ви знаєте, для чего они предназначены?
79
80 2 Александр Александров
Подклассы базового класса InputStream:
81
82
* StringBufferInputStream - превращает строку (String) во входной поток данных InputStream.
83
* SequenceInputStream - сливает два или более потока InputStream в единый поток.
84
* PushbackInputStream - входной поток, поддерживающий однобайтовый возврат во входной поток.
85
* PrintStream - выходной поток, включающий методы print() и println(). PipedInputStream - реализует понятие входного канала.
86
* ObjectInputStream - входной поток для объектов.
87
* InputStream - абстрактный класс, описывающий поток ввода.
88
* FilterInputStream - абстрактный класс, предоставляющий интерфейс для классов-надстроек, которые добавляют к существующим потокам полезные свойства.
89
* FileInputStream - для чтения информации из файла.
90
* DataInputStream - входной поток, включающий методы для чтения стандартных типов данных Java.
91
* ByteArrayInputStream - позволяет использовать буфер в памяти (массив байтов) в качестве источника данных для входного потока.
92
* BufferedInputStream - буферизированный входной поток.
93
94 1 Александр Александров
h3. Что вы знаете о RandomAccessFile?
95
96 2 Александр Александров
RandomAccessFile это класс который наследуется напрямую от Object и не наследуется от вышеприведенных базовых классов ввода\вывода. Предназначен для работы с файлами, поддерживая произвольный доступ к их содержимому.
97
98
Работа с классом RandomAccessFile напоминает использование совмещенных в одном классе потоков DataInputStream и DataOutputStream (они реализуют те же интерфейсы DataInput и DataOutput). Кроме того, метод seek() позволяет переместиться к определенной позиции и изменить хранящееся там значение.
99
100
При использовании RandomAccessFile необходимо знать структуру файла. Класс RandomAccessFile содержит методы для чтения и записи примитивов и строк UTF-8.
101
102 1 Александр Александров
h3. Какие есть режимы доступа к файлу есть у RandomAccessFile ?
103
104 2 Александр Александров
*RandomAccessFile* может открываться в режиме чтения ("r") или чтения/записи ("rw"). Также есть режим "rws", когда файл открывается для операций чтения-записи и каждое изменение данных файла немедленно записывается на физическое устройство.
105
106 1 Александр Александров
h3. Какие подклассы базового класса OutputStream ви знаєте, для чего они предназначены?
107
108 2 Александр Александров
Класс OutputStream - это абстрактный класс, определяющий потоковый байтовый вывод. В этой категории находятся классы, определяющие, куда направляются ваши данные: в массив байтов (но не напрямую в String; предполагается что вы сможете создать их из массива байтов), в файл или канал.
109
110
Подклассы базового класса OutputStream:
111
112
* PipedOutputStream - реализует понятие выходного канала.
113
* ObjectOutputStream - выходной поток для объектов
114
* FilterOutputStream - абстрактный класс, предоставляющий интерфейс для классов-надстроек, которые добавляют к существующим потокам полезные свойства.
115
* FileOutputStream - отправка данных в файл на диске. Реализация класса
116
* OutputStream.
117
* DataOutputStream - выходной поток, включающий методы для записи стандартных типов данных Java.
118
* ByteArrayOutputStream - создает буфер в памяти. Все данные, посылаемые в этот поток, размещаются в созданном буфере.
119
* BufferedOutputStream - буферизированный выходной поток.
120
121 1 Александр Александров
h3. Для чего используется PushbackInputStream?
122
123 2 Александр Александров
Разновидность буферизации, обеспечивающая чтение байта с последующим его возвратом в поток. Класс PushbackInputStream представляет механизм "заглянуть" во входной поток и увидеть, что оттуда поступит в следующий
124
раз, не извлекая информации. У класса есть дополнительный метод unread()
125
126 1 Александр Александров
h3. Для чего используется SequenceInputStream?
127
128 2 Александр Александров
Класс SequenceInputStream позволяет соединять вместе несколько экземпляров класса InputStream. Конструктор принимает в качестве аргумента либо пару объектов класса InputStream, либо интерфейс Enumeration. 
129
130
Во время работы класс выполняет запросы на чтение из первого объекта класса InputStream и до конца, а затем переключается на второй. При использовании интерфейса работа продолжится по всем объектам класса InputStream. По достижении конца каждого файла, связанный с ним поток закрывается. Закрытие потока, созданного объектом класса SequenceInputStream, приводит к закрытию всех открытых потоков.
131
132 1 Александр Александров
h3. Какие подклассы базового класса Reader ви знаєте, для чего они предназначены?
133 2 Александр Александров
134
Подклассы базового класса Reader:
135
136
* StringReader - входной поток, читающий из строки.
137
* Reader - абстрактный класс, описывающий символьный ввод.
138
* PushbackReader - входной поток, позволяющий возвращать символы обратно в поток.
139
* PipedReader - входной канал.
140
* LineNumberReader - входной поток, подсчитывающий строки.
141
* InputStreamReader - входной поток, транслирующий байты в символы.
142
* FilterReader - фильтрующий читатель.
143
* FileReader - входной поток, читающий файл.
144
* CharArrayReader - входной поток, который читает из символьного массива.
145
* BufferedReader - буферизированный входной символьный поток
146 1 Александр Александров
147
h3. Какие подклассы базового класса Writer ви знаете, для чего они предназначены?
148
149
h3. Что такое абсолютный путь и относительный путь?
150
151
h3. В каких пакетах лежат классы-потоки?
152
153
h3. Что вы знаете о классах-надстройках?
154
155
h3. Какой класс-надстройка позволяет читать данные из входного байтового потока в формате примитивных типов данных?
156
157
h3. Какой класс-надстройка позволяет ускорить чтение/запись за счет использования буфера?
158
159
h3. Какие классы позволяют преобразовать байтовые потоки в символьные и обратно?
160
161
h3. В чем отличие класса PrintWriter от PrintStream?
162
163
h3. Какой класс предназначен для работы с элементами файловой системы?
164
165
h3. Какой символ является разделителем при указании пути в файловой системе?
166
167
h3. Какие методы класса File ви знаете?
168
169
h3. Что вы знаете об интерфейсе FileFilter?
170
171
h3. Какие классы позволяют архивировать объекты?
Go to top