Java I/O Akışlarına Genel Bakış

Java'da Veri İçe Aktarma

Anthony Markham

VP Quant Developer

Akış Temelleri

  • Akışlar, FIFO (İlk Giren İlk Çıkar) sırasına sahip tek yönlü veri borularıdır
  • Bayt akışları ham ikili verilerle çalışır (InputStream/OutputStream)
  • Karakter akışları, otomatik kodlama ile metinleri işler (Reader/Writer)

Akışların temsili

Java'da Veri İçe Aktarma

Bayt Akışları

  • İkili veriler için kullanılır (görüntüler, sesler, vb.)
  • Temel soyut sınıflar: InputStream (okuma), OutputStream (yazma)
  • Ana uygulamalar: FileInputStream, FileOutputStream
  • Anahtar yöntemler: read() bayt döndürür, write() bayt yazar

İkili dosyalar: görüntüler ve sesler

Java'da Veri İçe Aktarma

Bayt Akışları

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

byte[] buffer = new byte[1024]; int bytesRead;
while ((bytesRead = fis.read(buffer)) != -1) { // Tampondaki baytları işleyin
System.out.println("Okunan " + bytesRead + " bayt"); }
} catch (Exception e) { System.err.println("Hata: " + e.getMessage()); }
Java'da Veri İçe Aktarma

Karakter Akışları

  • Özellikle metin verileri için tasarlanmıştır
  • Temel soyut sınıflar: Reader (metin okuma), Writer (metin yazma)
  • Ana uygulamalar: FileReader, FileWriter, BufferedReader, BufferedWriter
  • Kullanışlı yöntemler: readLine() tam bir metin satırı okur

CSV dosyaları

Java'da Veri İçe Aktarma

Karakter Akışları

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

while ((line = reader.readLine()) != null) { // Her satırı işleyin System.out.println(line); }
} catch (Exception e) { System.err.println("Hata: " + e.getMessage()); }
Java'da Veri İçe Aktarma

Tamponlu Akışlar - Performans

  • Disk işlemlerini azaltarak performansı artırır
  • BufferedInputStream ve BufferedOutputStream ile bayt akışlarını okuyun/yazın
  • BufferedReader, BufferedWriter ile karakter akışlarını okuyun/yazın
    • readLine() ile bir satırı tamamen okuyun
Java'da Veri İçe Aktarma

Tamponlu Akışlar - Performans

try (BufferedReader reader = new BufferedReader(new FileReader("data.csv"))) {
    // Başlık işleme
    String header = reader.readLine();
    System.out.println("Başlık: " + header);

// Verimli veri okuma String line; int count = 0; while ((line = reader.readLine()) != null) { count++; } System.out.println("Okunan " + count + " veri satırı"); } catch (Exception e) { System.out.println("Hata: " + e.getMessage()); }
Java'da Veri İçe Aktarma

Akış Zincirleme

  • Zincirdeki her akış belirli bir işlevsellik ekler
  • Yaygın desen: FileInputStream -> InputStreamReader -> BufferedReader
  • Her zaman en dıştaki akışı kapatın (diğerleri otomatik kapanır)
Java'da Veri İçe Aktarma

Akış Zincirleme

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("Hata: " + e.getMessage()); }
Java'da Veri İçe Aktarma

İstisna Yönetimi

  • G/Ç işlemleri için kritik öneme sahiptir
  • Yaygın istisnalar: IOException, FileNotFoundException
  • İstisnaları yakalamak için her zaman kaynaklarla deneme kullanın
Java'da Veri İçe Aktarma

İstisna Yönetimi

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); } } // Akış burada otomatik olarak kapanır return lines;
}
Java'da Veri İçe Aktarma

Haydi pratik yapalım!

Java'da Veri İçe Aktarma

Preparing Video For Download...