Java NIO - Pipe

Dans Java NIO pipe est un composant qui est utilisé pour écrire et lire des données entre deux threads.Pipe se compose principalement de deux canaux qui sont responsables de la propagation des données.

Parmi deux canaux constituants, l'un est appelé canal Sink qui est principalement destiné à l'écriture de données et l'autre est le canal Source dont le but principal est de lire les données du canal Sink.

La synchronisation des données est maintenue dans l'ordre pendant l'écriture et la lecture des données car il faut s'assurer que les données doivent être lues dans le même ordre que celui dans lequel elles sont écrites sur le Pipe.

Il doit garder à l'esprit qu'il s'agit d'un flux de données unidirectionnel dans Pipe, c'est-à-dire que les données sont écrites dans le canal Sink uniquement et ne peuvent être lues qu'à partir du canal source.

En Java, NIO pipe est définie comme une classe abstraite avec principalement trois méthodes, dont deux sont abstraites.

Méthodes de classe Pipe

  • open() - Cette méthode est utilisée pour obtenir une instance de Pipe ou nous pouvons dire que pipe est créée en appelant cette méthode.

  • sink() - Cette méthode renvoie le canal récepteur du Pipe qui est utilisé pour écrire des données en appelant sa méthode d'écriture.

  • source() - Cette méthode retourne le canal source du Pipe qui est utilisé pour lire les données en appelant sa méthode read.

Exemple

L'exemple suivant montre l'implémentation du canal 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();
      }
   }
}

Production

Test Data to Check java NIO Channels Pipe.

En supposant que nous ayons un fichier texte c:/test.txt, qui a le contenu suivant. Ce fichier sera utilisé comme entrée pour notre programme d'exemple.