Přehled Java I/O streamů

Importing Data in Java

Anthony Markham

VP Quant Developer

Základy streamů

  • Streamy jsou jednosměrné datové kanály s pořadím FIFO (First In, First Out)
  • Bajtové streamy pracují s binárními daty (InputStream/OutputStream)
  • Znakové streamy zpracovávají text s automatickým kódováním (Reader/Writer)

Znázornění streamů

Importing Data in Java

Bajtové streamy

  • Určeny pro binární data (obrázky, zvuk atd.)
  • Základní abstraktní třídy: InputStream (čtení), OutputStream (zápis)
  • Klíčové implementace: FileInputStream, FileOutputStream
  • Klíčové metody: read() vrací bajty, write() zapisuje bajty

Binární soubory: obrázky a zvuk

Importing Data in Java

Bajtové streamy

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()); }
Importing Data in Java

Znakové streamy

  • Určeny pro textová data
  • Základní abstraktní třídy: Reader (čtení textu), Writer (zápis textu)
  • Klíčové implementace: FileReader, FileWriter, BufferedReader, BufferedWriter
  • Praktické metody: readLine() přečte celý řádek textu

Soubory CSV

Importing Data in Java

Znakové streamy

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()); }
Importing Data in Java

Bufferované streamy – výkon

  • Zlepšuje výkon snížením počtu diskových operací
  • Čtení/zápis bajtových streamů pomocí BufferedInputStream a BufferedOutputStream
  • Čtení/zápis znakových streamů pomocí BufferedReader, BufferedWriter
    • Čtení celého řádku pomocí readLine()
Importing Data in Java

Bufferované streamy – výkon

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()); }
Importing Data in Java

Řetězení streamů

  • Každý stream v řetězci přidává specifickou funkcionalitu
  • Běžný vzor: FileInputStream -> InputStreamReader -> BufferedReader
  • Vždy uzavřete nejvzdálenější stream (ostatní se uzavřou automaticky)
Importing Data in Java

Řetězení streamů

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()); }
Importing Data in Java

Ošetření výjimek

  • Klíčové pro I/O operace
  • Časté výjimky: IOException, FileNotFoundException
  • Vždy používejte try-with-resources pro zachycení výjimek
Importing Data in Java

Ošetření výjimek

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;
}
Importing Data in Java

Pojďme cvičit!

Importing Data in Java

Preparing Video For Download...