Özet - NIO
- Java kursu
- Uzman
- Ders 18/46
- 5 dk
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
// Paths.get ile yol oluştur
// getFileName ile yazdırÖrnek çözüm
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
// ByteBuffer ile tampon oluştur
// üç bayt put ile yaz
// flip sonrası remaining yazdırÖrnek çözüm
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
System.out.println(p.____());
System.out.println(p.getFileName());
Açıklama: getFileName son yol öğesini verir.