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. Какие классы позволяют архивировать объекты? |