Що таке InputStream в Java?
Клас InputStream у Java є базовим класом для всіх потоків введення. Він забезпечує абстрактний інтерфейс для зчитування даних із різних джерел, таких як файли, масиви байтів або мережеві з'єднання. Основне призначення InputStream полягає у зчитуванні послідовності байтів.
Методи InputStream надають гнучкий спосіб роботи з даними. Найпопулярніші серед них — read(), available() та close(). Ці методи можуть бути перевизначені у класах-нащадках для конкретної реалізації потоків.
- Зчитування даних побайтово або масивом байтів.
- Можливість перевірки доступної кількості даних за допомогою методу
available(). - Закриття потоку для звільнення системних ресурсів.
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamExample {
public static void main(String[] args) {
try (InputStream inputStream = new FileInputStream("example.txt")) {
int data;
while ((data = inputStream.read()) != -1) {
// Зчитування даних і перетворення в символ
System.out.print((char) data);
}
} catch (IOException e) {
System.out.println("Сталася помилка під час зчитування файлу: " + e.getMessage());
}
}
}
Приклад вище демонструє, як можна використовувати InputStream для зчитування вмісту текстового файлу. Метод read() повертає наступний байт даних, а при досягненні кінця файлу повертає -1.
Варто пам'ятати, що InputStream необхідно закривати після використання, щоб звільнити ресурси, які виділяє операційна система. Використання конструкції try-with-resources спрощує цей процес, автоматично закриваючи потік.
Для роботи з великими обсягами даних рекомендується зчитувати їх блоками, використовуючи метод read(byte[] b). Це підвищує продуктивність завдяки зменшенню кількості викликів методу read.
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class BufferedReadExample {
public static void main(String[] args) {
try (InputStream inputStream = new FileInputStream("example.txt")) {
byte[] buffer = new byte[1024]; // Створюємо буфер розміром 1 KB
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
// Перетворюємо зчитані байти у рядок
System.out.print(new String(buffer, 0, bytesRead));
}
} catch (IOException e) {
System.out.println("Сталася помилка під час зчитування файлу: " + e.getMessage());
}
}
}
Цей приклад демонструє використання буфера для прискорення процесу зчитування. Зчитування даних великими блоками може значно зменшити витрати на виконання програми.
Клас InputStream є основою для багатьох інших класів, таких як FileInputStream, ByteArrayInputStream та BufferedInputStream, які надають додаткові можливості для роботи з потоками даних.