CodeBlanks Logo Icon CodeBlanks

Channel

Channel ile NIO kanalını öğrenirsin.

Channel kavramı

Bir Channel (kanal), veriyi bir buffer üzerinden taşır. Akışların (stream) aksine channel çift yönlü olabilir ve bloklamayan (non-blocking) moda geçebilir. Bu, yüksek hacimli IO için daha verimlidir.

Örnek: WritableByteChannel, bir ByteBuffer alıp write yöntemiyle hedefe yazar. Channels.newChannel(out) ile sıradan bir OutputStream bir kanala sarınır. Böylece akış tabanlı kod, NIO kanal API'siyle çalışabilir. Kanallar close ile kapatılır.

Channel ve akım farkı

Akımlar (stream) tek bayt veya bayt dizisiyle çalışır; channel ise ByteBuffer ile blok halinde veri taşır. Akımlar genelde bloklayıcıdır; channel'lar bazı türlerde bloklamayan moda geçebilir.

Örnek: FileChannel bir dosyaya doğrudan kanal açar; read ve write bir buffer alır. Bu, büyük dosyalarda akımdan daha hızlıdır. Ayrıca transferTo gibi yöntemler kanaldan kanala veriyi doğrudan kopyalar. Bu yüzden yüksek performanslı IO'da channel tercih edilir.

Uygulama Kanala bayt yaz

Bir ByteArrayOutputStream out oluştur. WritableByteChannel ch = Channels.newChannel(out) ile kanalı sar. ByteBuffer.wrap(new byte[]{65, 66}) ile iki baytlık tampon hazırla. ch.write(b) ile yaz, ch.close() ile kapat. new String(out.toByteArray()) sonucunu System.out.println ile yazdır.

Başlangıç kodu

Main.java
// ByteArrayOutputStream oluştur
// Channels.newChannel ile kanalı sar
// yaz ve sonucu yazdır

Örnek çözüm

Main.java
import java.io.ByteArrayOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.WritableByteChannel;

public class ChannelDemo {
    public static void main(String[] args) throws Exception {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        WritableByteChannel ch = Channels.newChannel(out);
        ByteBuffer b = ByteBuffer.wrap(new byte[]{65, 66});
        ch.write(b);
        ch.close();
        System.out.println(new String(out.toByteArray()));
    }
}

Beklenen çıktı

AB

Soru ve cevaplar

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

1 Channel kavramlarını eşleştir

Kavram Anlamı
Channel Veri kanalı
ByteBuffer Taşıdığı veri
write Tamponu yazar
Channels.newChannel Akımdan kanal

2 Channel hangi veriyle çalışır?

  • Dizgiler
  • Karakterler
  • ByteBuffer Doğru cevap
  • Nesneler

Açıklama: Channel, ByteBuffer üzerinden veri taşır.

3 Channels.newChannel çağrısını tamamla

Soru
WritableByteChannel ch = Channels.____(out);
Cevap
WritableByteChannel ch = Channels.newChannel(out);

Açıklama: newChannel bir akımı kanala sarar.

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