Огляд потоків введення/виведення Java

Імпорт даних у Java

Anthony Markham

VP Quant Developer

Основи потоків

  • Потоки — це однобічні канали даних з порядком FIFO (First In, First Out)
  • Байтові потоки працюють із сирими бінарними даними (InputStream/OutputStream)
  • Символьні потоки обробляють текст із автоматичним кодуванням (Reader/Writer)

Схема потоків

Імпорт даних у Java

Байтові потоки

  • Використовуються для бінарних даних (зображення, аудіо тощо)
  • Базові абстрактні класи: InputStream (читання), OutputStream (запис)
  • Ключові реалізації: FileInputStream, FileOutputStream
  • Основні методи: read() повертає байти, write() записує байти

Бінарні файли: зображення й аудіо

Імпорт даних у Java

Байтові потоки

try (FileInputStream fis = new FileInputStream("data.bin")) {

byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) { // Process bytes in buffer
System.out.println("Read " + bytesRead + " bytes"); }
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Імпорт даних у Java

Символьні потоки

  • Створені спеціально для текстових даних
  • Базові абстрактні класи: Reader (читання тексту), Writer (запис тексту)
  • Ключові реалізації: FileReader, FileWriter, BufferedReader, BufferedWriter
  • Зручні методи: readLine() читає цілий рядок тексту

Файли CSV

Імпорт даних у Java

Символьні потоки

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    String line;

while ((line = reader.readLine()) != null) { // Process each line System.out.println(line); }
} catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Імпорт даних у Java

Буферизовані потоки — продуктивність

  • Підвищує продуктивність, зменшуючи операції з диском
  • Читання/запис байтових потоків через BufferedInputStream і BufferedOutputStream
  • Читання/запис символьних потоків через BufferedReader, BufferedWriter
    • Читання цілого рядка методом readLine()
Імпорт даних у Java

Буферизовані потоки — продуктивність

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    // Header processing
    String header = reader.readLine();
    System.out.println("Header: " + header);

// Efficient data reading String line; int count = 0; while ((line = reader.readLine()) != null) { count++; } System.out.println("Read " + count + " data rows"); } catch (Exception e) { System.out.println("Error: " + e.getMessage()); }
Імпорт даних у Java

Ланцюжки потоків

  • Кожен потік у ланцюжку додає свою функціональність
  • Типовий шаблон: FileInputStream -> InputStreamReader -> BufferedReader
  • Завжди закривайте найзовнішній потік (інші закриються автоматично)
Імпорт даних у Java

Ланцюжки потоків

import java.nio.charset.StandardCharsets;
try (

BufferedReader reader = new BufferedReader(
new InputStreamReader(
new FileInputStream("data.csv"),
StandardCharsets.UTF_8 )
)
) { String line; while ((line = reader.readLine()) != null) { System.out.println(line);} } catch (Exception e) { System.err.println("Error: " + e.getMessage()); }
Імпорт даних у Java

Обробка винятків

  • Вирішальне значення для операцій введення/виведення
  • Поширені винятки: IOException, FileNotFoundException
  • Завжди використовуйте try-with-resources для обробки винятків
Імпорт даних у Java

Обробка винятків

import java.util.ArrayList;
import java.util.List;
public static List<String> readLines(String filePath) throws IOException {

List<String> lines = new ArrayList<>(); try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { String line; while ((line = reader.readLine()) != null) { lines.add(line); } } // Stream automatically closed here return lines;
}
Імпорт даних у Java

Давайте потренуємось!

Імпорт даних у Java

Preparing Video For Download...