Przegląd strumieni Java I/O

Importowanie danych w Javie

Anthony Markham

VP Quant Developer

Podstawy strumieni

  • Strumienie to jednokierunkowe kanały danych w kolejności FIFO (First In, First Out)
  • Strumienie bajtowe operują na surowych danych binarnych (InputStream/OutputStream)
  • Strumienie znakowe obsługują tekst z automatycznym kodowaniem (Reader/Writer)

Reprezentacja strumieni

Importowanie danych w Javie

Strumienie bajtowe

  • Używane dla danych binarnych (obrazy, audio itp.)
  • Podstawowe klasy abstrakcyjne: InputStream (odczyt), OutputStream (zapis)
  • Główne implementacje: FileInputStream, FileOutputStream
  • Główne metody: read() zwraca bajty, write() zapisuje bajty

Pliki binarne: obrazy i audio

Importowanie danych w Javie

Strumienie bajtowe

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()); }
Importowanie danych w Javie

Strumienie znakowe

  • Przeznaczone do danych tekstowych
  • Podstawowe klasy abstrakcyjne: Reader (odczyt tekstu), Writer (zapis tekstu)
  • Główne implementacje: FileReader, FileWriter, BufferedReader, BufferedWriter
  • Przydatne metody: readLine() odczytuje całą linię tekstu

Pliki CSV

Importowanie danych w Javie

Strumienie znakowe

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()); }
Importowanie danych w Javie

Strumienie buforowane – wydajność

  • Poprawia wydajność poprzez redukcję operacji dyskowych
  • Odczyt/zapis bajtowych strumieni: BufferedInputStream i BufferedOutputStream
  • Odczyt/zapis znakowych strumieni: BufferedReader, BufferedWriter
    • Odczyt całej linii: readLine()
Importowanie danych w Javie

Strumienie buforowane – wydajność

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()); }
Importowanie danych w Javie

Łączenie strumieni

  • Każdy strumień w łańcuchu dodaje określoną funkcjonalność
  • Typowy wzorzec: FileInputStream -> InputStreamReader -> BufferedReader
  • Zawsze zamykaj najbardziej zewnętrzny strumień (pozostałe zamykają się automatycznie)
Importowanie danych w Javie

Łączenie strumieni

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()); }
Importowanie danych w Javie

Obsługa wyjątków

  • Kluczowe dla operacji I/O
  • Typowe wyjątki: IOException, FileNotFoundException
  • Zawsze używaj try-with-resources do obsługi wyjątków
Importowanie danych w Javie

Obsługa wyjątków

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;
}
Importowanie danych w Javie

Czas na ćwiczenia!

Importowanie danych w Javie

Preparing Video For Download...