Java NIO - Boru

Java'da NIO boru, iki iş parçacığı arasında veri yazmak ve okumak için kullanılan bir bileşendir. Boru, esas olarak veri yayılımından sorumlu iki kanaldan oluşur.

İki kurucu kanaldan biri, esas olarak veri yazmak için olan Sink kanalı olarak adlandırılır ve diğeri, temel amacı Sink kanalından veri okumak olan Kaynak kanaldır.

Veri senkronizasyonu, verilerin Boruya yazıldıkları sırayla okunması gerektiğinden, veri yazma ve okuma sırasında düzenli tutulur.

Boru içinde tek yönlü bir veri akışı olduğu unutulmamalıdır, yani veriler yalnızca Sink kanalında yazılır ve yalnızca Kaynak kanalından okunabilir.

Java'da NIO boru, ikisi soyut olan temelde üç yöntemle soyut bir sınıf olarak tanımlanır.

Boru sınıfı yöntemleri

  • open() - Bu yöntem bir Boru örneğini almak için kullanılır veya borunun bu yöntemi çağırarak oluşturulduğunu söyleyebiliriz.

  • sink() - Bu yöntem, veri yazma yöntemini çağırarak veri yazmak için kullanılan Borunun havuz kanalını döndürür.

  • source() - Bu yöntem, okuma yöntemini çağırarak verileri okumak için kullanılan Borunun kaynak kanalını döndürür.

Misal

Aşağıdaki örnek, Java NIO kanalının uygulamasını gösterir.

import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.Pipe;

public class PipeDemo {
   public static void main(String[] args) throws IOException {
      //An instance of Pipe is created
      Pipe pipe = Pipe.open();
      // gets the pipe's sink channel
      Pipe.SinkChannel skChannel = pipe.sink();
      String testData = "Test Data to Check java NIO Channels Pipe.";
      ByteBuffer buffer = ByteBuffer.allocate(512);
      buffer.clear();
      buffer.put(testData.getBytes());
      buffer.flip();
      //write data into sink channel.
      while(buffer.hasRemaining()) {
         skChannel.write(buffer);
      }
      //gets  pipe's source channel
      Pipe.SourceChannel sourceChannel = pipe.source();
      buffer = ByteBuffer.allocate(512);
      //write data into console     
      while(sourceChannel.read(buffer) > 0){
         //limit is set to current position and position is set to zero
         buffer.flip();
         while(buffer.hasRemaining()){
            char ch = (char) buffer.get();
            System.out.print(ch);
         }
         //position is set to zero and limit is set to capacity to clear the buffer.
         buffer.clear();
      }
   }
}

Çıktı

Test Data to Check java NIO Channels Pipe.

Bir metin dosyamız olduğunu varsayarsak c:/test.txt, aşağıdaki içeriğe sahip. Bu dosya, örnek programımız için bir girdi olarak kullanılacaktır.