Channels
- Java kursu
- İleri seviye
- Ders 71/82
- 5 dk
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(); // 65Bu, 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.
Başlangıç kodu
import java.nio.file.*;
import java.nio.channels.*;
import java.nio.*;
// ChannelDemo sınıfında main yaz
// createTempFile ve writeString ile kur; FileChannel aç; read+flip+get ile ilk karakteri yazdırÖrnek çözüm
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());
}
}
}Beklenen çıktı
A
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 ByteBuffer oluşturmayı tamamla
ByteBuffer buf = ByteBuffer.____(16);
ByteBuffer buf = ByteBuffer.allocate(16);
Açıklama: ByteBuffer.allocate(n) ile arabellek oluşturulur.
2 FileChannel ile dosyayı açmak için ne kullanılır?
- new FileChannel()
- Files.openChannel(path)
- FileChannel.open(path, option) Doğru cevap
- channel.of(path)
Açıklama: FileChannel.open(path, option) ile açılır.
3 Channel kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
FileChannel |
Dosya kanalı |
ByteBuffer |
Veri arabelleği |
flip() |
Okumaya hazırlar |
StandardOpenOption |
Açma seçenekleri |