Java NIO - Pipa

Dalam Java, pipa NIO adalah komponen yang digunakan untuk menulis dan membaca data antara dua utas, pipa terutama terdiri dari dua saluran yang bertanggung jawab untuk penyebaran data.

Di antara dua saluran penyusun satu disebut sebagai saluran Sink yang terutama untuk menulis data dan yang lainnya adalah saluran Sumber yang tujuan utamanya adalah untuk membaca data dari saluran Sink.

Sinkronisasi data dijaga agar selama penulisan dan pembacaan data karena harus dipastikan bahwa data harus dibaca dalam urutan yang sama seperti yang ditulis ke Pipe.

Harus diingat bahwa ini adalah aliran data searah di Pipe yaitu data ditulis di saluran Sink saja dan hanya bisa dibaca dari saluran Sumber.

Dalam Java, pipa NIO didefinisikan sebagai kelas abstrak dengan tiga metode di mana dua di antaranya adalah abstrak.

Metode kelas Pipa

  • open() - Metode ini digunakan untuk mendapatkan turunan dari Pipa atau dapat dikatakan pipa dibuat dengan memanggil metode ini.

  • sink() - Metode ini mengembalikan saluran sink Pipe yang digunakan untuk menulis data dengan memanggil metode tulisnya.

  • source() - Metode ini mengembalikan saluran sumber Pipe yang digunakan untuk membaca data dengan memanggil metode baca.

Contoh

Contoh berikut menunjukkan implementasi pipa Java NIO.

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();
      }
   }
}

Keluaran

Test Data to Check java NIO Channels Pipe.

Dengan asumsi kami memiliki file teks c:/test.txt, yang memiliki konten berikut. File ini akan digunakan sebagai masukan untuk program contoh kita.