Java
Channels
FileChannel ile kanal tabanlı I/O öğrenirsin.
Channels
Channel, NIO'nun temel arayüzüdür; FileChannel dosya işlemleri için kullanılır. ByteBuffer ile veri arabelleğe alınıp kanaldan okunur ya da yazılır.
try (FileChannel ch = FileChannel.open(p,
StandardOpenOption.READ)) {
ByteBuffer buf = ByteBuffer.allocate(16);
ch.read(buf);
buf.flip();
}
Burada flip() arabelleği okumaya hazırlar. Channel, akışlardan farklı olarak ileri-geri hareket edebilir. Bu, büyük dosyalarda verimli erişim sağlar. Modern NIO API'sinin temelidir.
flip ve rewind
buf.flip() arabelleği okumaya hazırlar: konumu sıfırlar ve sınırını günceller. rewind() ise konumu sıfırlar ama sınırı değiştirmez.
buf.put((byte) 65); // 'A'
buf.flip();
byte b = buf.get(); // 65
Bu, okuma/yazma geçişlerinde standart bir desendir. clear() ise arabelleği yeniden yazmaya hazırlar. NIO kodunda bu yöntemler sık karşına çıkar; doğru kullanım performans ve doğruluk için kritiktir.
Uygulama FileChannel ile bayt oku
Bir ChannelDemo sınıfında main yaz; Files.createTempFile("c", ".txt") ile dosya oluştur, Files.writeString(p, "AB") ile iki karakter yaz. try (FileChannel ch = FileChannel.open(p, StandardOpenOption.READ)) bloğunda ByteBuffer buf = ByteBuffer.allocate(2) ile arabellek oluştur, ch.read(buf) çağır, buf.flip() yap ve System.out.println((char) buf.get()) ile ilk karakteri yazdır.
Örnek çözümü göster
import java.nio.file.*;
import java.nio.channels.*;
import java.nio.*;
class ChannelDemo {
public static void main(String[] args) throws Exception {
Path p = Files.createTempFile("c", ".txt");
Files.writeString(p, "AB");
try (FileChannel ch = FileChannel.open(p, StandardOpenOption.READ)) {
ByteBuffer buf = ByteBuffer.allocate(2);
ch.read(buf);
buf.flip();
System.out.println((char) buf.get());
}
}
}
Kendini test et
-
ByteBuffer oluşturmayı tamamla
ByteBuffer buf = ByteBuffer.____(16);
Cevabı göster
ByteBuffer buf = ByteBuffer.allocate(16);
-
FileChannel ile dosyayı açmak için ne kullanılır?
- new FileChannel()
- Files.openChannel(path)
- FileChannel.open(path, option)
- channel.of(path)
Cevabı göster
FileChannel.open(path, option) — FileChannel.open(path, option) ile açılır.
-
Channel kavramlarını eşleştir
- FileChannel
- Dosya kanalı
- ByteBuffer
- Veri arabelleği
- flip()
- Okumaya hazırlar
- StandardOpenOption
- Açma seçenekleri
Sıradaki ders: Özet - I/O ve NIO temelleri