CodeBlanks Logo Icon CodeBlanks

Özet - NIO

Buffer, Channel ve Selector'ü birleştirerek bir echo sunucusu yazarsın.

Özet - NIO

Bu grupta NIO'nun temellerini gördük: Buffer ile veri taşıma, Channel ile çift yönlü IO, Selector ile çoklama, Charset ile kodlama ve Path/Files ile yol işlemleri. Bunlar yüksek hacimli IO için tasarlanmıştır.

Eski akım API'sine göre NIO, blok blok ve bloklamayan veri işleme sunar. Buffer ve channel birlikte çalışır; selector tek iş parçacığıyla çok kanalı yönetir; charset dizgi ile bayt arasını çevirir; path ve files dosya işlemlerini düzenler. Şimdi iki küçük görevle tekrar edeceğiz.

Buffer ve channel birlikte

Gerçek NIO kodunda buffer ve channel birlikte kullanılır. Veri önce bir buffera yazılır, sonra channel ile hedefe taşınır. Bu, blok bazlı veri aktarımının temelidir.

Örnek: bir ByteBuffer bayt dizisiyle saranılır, channel.write(buffer) ile yazılır. Aynı akış tersine de çalışır: channel.read(buffer) veriyi buffera çeker, buffer.flip() sonrası get ile okunur. Bu örüntü dosya ve ağ IO'sunda yinelenir.

Uygulama Yolun dosya adını yazdır

Paths.get("log", "app.txt") ile bir Path oluştur. getFileName sonucunu System.out.println ile yazdır.

Başlangıç kodu

Main.java
// Paths.get ile yol oluştur
// getFileName ile yazdır

Örnek çözüm

Main.java
import java.nio.file.Path;
import java.nio.file.Paths;

public class PathStringDemo {
    public static void main(String[] args) {
        Path p = Paths.get("log", "app.txt");
        System.out.println(p.getFileName());
    }
}

Beklenen çıktı

app.txt

Uygulama Buffer remaining sayısını yazdır

ByteBuffer.allocate(8) ile bir tampon oluştur. put ile (byte) 1, (byte) 2 ve (byte) 3 yaz. flip ile okuma moduna geç. remaining sonucunu System.out.println ile yazdır.

Başlangıç kodu

Main.java
// ByteBuffer ile tampon oluştur
// üç bayt put ile yaz
// flip sonrası remaining yazdır

Örnek çözüm

Main.java
import java.nio.ByteBuffer;

public class BufferCountDemo {
    public static void main(String[] args) {
        ByteBuffer b = ByteBuffer.allocate(8);
        b.put((byte) 1);
        b.put((byte) 2);
        b.put((byte) 3);
        b.flip();
        System.out.println(b.remaining());
    }
}

Beklenen çıktı

3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 NIO.2'de dosya yolu için hangi kullanılır?

  • ByteBuffer
  • Selector
  • Path Doğru cevap
  • Charset

Açıklama: Path bir dosya yolunu temsil eder.

2 Dosya adını al

Soru
System.out.println(p.____());
Cevap
System.out.println(p.getFileName());

Açıklama: getFileName son yol öğesini verir.

Uzman bölümündeki tüm dersler