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.