Prezentare generală Java I/O Streams

Importul datelor în Java

Anthony Markham

VP Quant Developer

Noțiuni fundamentale despre fluxuri

  • Fluxurile sunt conducte unidirecționale de date cu ordine FIFO (First In, First Out)
  • Fluxurile de octeți lucrează cu date binare brute (InputStream/OutputStream)
  • Fluxurile de caractere gestionează text cu codificare automată (Reader/Writer)

Reprezentarea fluxurilor

Importul datelor în Java

Fluxuri de octeți

  • Utilizate pentru date binare (imagini, audio etc.)
  • Clase abstracte de bază: InputStream (citire), OutputStream (scriere)
  • Implementări principale: FileInputStream, FileOutputStream
  • Metode principale: read() returnează octeți, write() scrie octeți

Fișiere binare: imagini și audio

Importul datelor în Java

Fluxuri de octeți

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()); }
Importul datelor în Java

Fluxuri de caractere

  • Concepute special pentru date text
  • Clase abstracte de bază: Reader (citire text), Writer (scriere text)
  • Implementări principale: FileReader, FileWriter, BufferedReader, BufferedWriter
  • Metode utile: readLine() citește o linie întreagă de text

Fișiere CSV

Importul datelor în Java

Fluxuri de caractere

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()); }
Importul datelor în Java

Fluxuri cu buffer - performanță

  • Îmbunătățește performanța prin reducerea operațiilor pe disc
  • Citire/scriere fluxuri de octeți cu BufferedInputStream și BufferedOutputStream
  • Citire/scriere fluxuri de caractere cu BufferedReader, BufferedWriter
    • Citirea unei linii întregi cu readLine()
Importul datelor în Java

Fluxuri cu buffer - performanță

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()); }
Importul datelor în Java

Înlănțuirea fluxurilor

  • Fiecare flux din lanț adaugă funcționalitate specifică
  • Model comun: FileInputStream -> InputStreamReader -> BufferedReader
  • Închideți întotdeauna fluxul exterior (celelalte se închid automat)
Importul datelor în Java

Înlănțuirea fluxurilor

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()); }
Importul datelor în Java

Gestionarea excepțiilor

  • Esențial pentru operațiile I/O
  • Excepții frecvente: IOException, FileNotFoundException
  • Utilizați întotdeauna try-with-resources pentru gestionarea excepțiilor
Importul datelor în Java

Gestionarea excepțiilor

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;
}
Importul datelor în Java

Să exersăm!

Importul datelor în Java

Preparing Video For Download...