Слайд 2Потоки введення-виведення: основні поняття
Поняття потоку лежить в основі всього введення-виведення в Java
Потік
![Потоки введення-виведення: основні поняття Поняття потоку лежить в основі всього введення-виведення в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-1.jpg)
введення-виведення - абстракція, яка описує передачу даних від джерела до приймача.
Більш точно: звідки можна читати - джерело, а куди можна записувати - приймач.
Слайд 3Потоки введення-виведення: продовження
Фізично потоки можуть бути приєднані до будь-яких джерел та приймачів:
![Потоки введення-виведення: продовження Фізично потоки можуть бути приєднані до будь-яких джерел та](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-2.jpg)
консоль, файли, мережа та ін.
Для окремих типів джерел і приймачів існують методи, які дозволяють створити той чи інший потік.
Слайд 4Основні пакети
java.io - базові можливості;
java.nio - новий інтерфейс введення-виведення з важливими удосконаленнями;
![Основні пакети java.io - базові можливості; java.nio - новий інтерфейс введення-виведення з](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-3.jpg)
вважається більш ефективним для роботи в мережі та клієнт-серверних застосувань.
Слайд 5Загальна класифікація потоків
Потоків дуже багато.
Потоки: байтові (орієнтовані на читання/запис байтів) і символьні
![Загальна класифікація потоків Потоків дуже багато. Потоки: байтові (орієнтовані на читання/запис байтів)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-4.jpg)
(читання/запис символів).
В 1.0 все введення-виведення було байтовим. Зараз у ряді випадків використання байтових потоків вважається deprecated.
Слайд 6Базові потоки
На вершині ієрархії: байтові потоки InputStream та OutputStream; символьні потоки Reader
![Базові потоки На вершині ієрархії: байтові потоки InputStream та OutputStream; символьні потоки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-5.jpg)
та Writer.
Стандартні потоки (байтові): System.in; System.out; System.err.
Слайд 7Метод read()
Абстрактний метод, визначений в InputStream. Зчитує один байт.
В кінці потоку повертає
![Метод read() Абстрактний метод, визначений в InputStream. Зчитує один байт. В кінці](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-6.jpg)
-1.
Інші методи викликають цей метод.
Перевизначається в підкласах.
Аналогічний метод - в Reader: читає один символ.
Слайд 8Проблема блокування потоку
Виникає, якщо нема чого зчитувати.
Метод available() повертає кількість байтів, які
![Проблема блокування потоку Виникає, якщо нема чого зчитувати. Метод available() повертає кількість](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-7.jpg)
можуть бути зчитані.
Слайд 9Виведення
Метод write(byte b) з класу OutputStream дозволяє вивести байт у потік.
Аналогічний метод
![Виведення Метод write(byte b) з класу OutputStream дозволяє вивести байт у потік.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-8.jpg)
класу Writer дозволяє вивести в потік символ.
Особливість: стандартний потік System.out є екземпляром класу PrintStream; для нього визначені узагальнені методи print та println.
Слайд 10Клас BufferedReader
Важливий клас, який має корисні методи для читання.
Зокрема, ми часто будемо
![Клас BufferedReader Важливий клас, який має корисні методи для читання. Зокрема, ми](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-9.jpg)
використовувати readLine() - читання рядка.
Слайд 11Базові файлові потоки
Байтові: FileInputStream; FileOutputStream.
Символьні: FileReader; FileWriter.
Корисна форма конструктора: відкриття файлу в
![Базові файлові потоки Байтові: FileInputStream; FileOutputStream. Символьні: FileReader; FileWriter. Корисна форма конструктора:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-10.jpg)
режимі append:
FileWriter(filename, true);
Слайд 12“Перехідні” потоки
InputStreamReader - бере дані з байтового потоки і переводить в символи
![“Перехідні” потоки InputStreamReader - бере дані з байтового потоки і переводить в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-11.jpg)
Unicode;
OutputStreamWriter - записує символи в байтовий потік.
Типовий приклад:
BufferedReader br=new BufferedReader(new InputStreamReader (System.in));
Слайд 13Інші важливі можливості
запис до рядків і читання з рядків;
потоки, пов’язані з zip-файлами;
канали:
![Інші важливі можливості запис до рядків і читання з рядків; потоки, пов’язані](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388033/slide-12.jpg)
використання потоків для обміну даними між процесами;
серіалізація;
…