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