Java NIO - Canaux

La description

Comme son nom l'indique, le canal est utilisé comme moyen de flux de données d'un bout à l'autre. Ici, dans java, le canal NIO agit de la même manière entre le tampon et une entité à l'autre extrémité, en d'autres termes, le canal est utilisé pour lire les données dans le tampon et également pour écrire des données à partir du tampon.

Contrairement aux flux qui sont utilisés dans les canaux Java IO conventionnels, les canaux IO sont bidirectionnels, c'est-à-dire peuvent lire et écrire. Le canal Java NIO prend en charge le flux de données asynchrone en mode bloquant et non bloquant.

Implémentations de Channel

Le canal Java NIO est implémenté principalement dans les classes suivantes -

  • FileChannel- Afin de lire les données du fichier, nous utilisons le canal de fichier. L'objet du canal de fichier ne peut être créé qu'en appelant la méthode getChannel () sur l'objet fichier car nous ne pouvons pas créer d'objet fichier directement.

  • DatagramChannel - Le canal de datagramme peut lire et écrire les données sur le réseau via UDP (User Datagram Protocol). L'objet de DataGramchannel peut être créé en utilisant des méthodes d'usine.

  • SocketChannel- Le canal SocketChannel peut lire et écrire les données sur le réseau via TCP (Transmission Control Protocol). Il utilise également les méthodes de fabrique pour créer le nouvel objet.

  • ServerSocketChannel- Le ServerSocketChannel lit et écrit les données via des connexions TCP, comme un serveur Web. Pour chaque connexion entrante, un SocketChannel est créé.

Exemple

L'exemple suivant lit un fichier texte à partir de C:/Test/temp.txt et imprime le contenu sur la console.

temp.txt

Hello World!

ChannelDemo.java

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class ChannelDemo {
   public static void main(String args[]) throws IOException {
      RandomAccessFile file = new RandomAccessFile("C:/Test/temp.txt", "r");
      FileChannel fileChannel = file.getChannel();
      ByteBuffer byteBuffer = ByteBuffer.allocate(512);
      while (fileChannel.read(byteBuffer) > 0) {
         // flip the buffer to prepare for get operation
         byteBuffer.flip();
         while (byteBuffer.hasRemaining()) {
            System.out.print((char) byteBuffer.get());
         }
      }
      file.close();
   }
}

Production

Hello World!