Les canaux sont des objets à partir desquels des données peuvent être lues ou écrites. Les canaux peuvent être assimilés aux flux du paquetage IO qui connectent une entité telle qu'un fichier ou un socket réseau. Cependant, les canaux diffèrent des flux, dans la mesure ou les premiers peuvent être bidirectionnels (lecture, écriture ou lecture/écriture), tandis que les derniers sont uniquement unidirectionnels (InputStream ou OutputStream).

ClasseDescription
Channelscontient des méthodes utilitaires pour les canaux et les flux.
DatagramChannelcontient des canaux sélectionnables pour les sockets orientés datagrammes.
FileChannelcontient un canal pour la lecture, l'écriture, le mapping et la manipulation des fichiers.
FileChannel.MapModecontient une énumération sans restriction de type (typesafe) pour les modes de fichier mappé.
Pipecontient une paire de canaux qui implémente un canal unidirectionnel.
Pipe.SinkChannelcontient un canal représentant la capacité d'écriture d'un objet Pipe.
Pipe.SourceChannelcontient un canal représentant la capacité en lecture d'un objet Pipe.
SelectableChannelcontient un canal qui peut être multiplexé via un objet Selector.
ServerSocketChannelcontient un canal sélectionnable pour les flux écoutant des sockets.
SocketChannelcontient un canal sélectionnable pour les flux connectés sur des sockets.

La classe Channels dispose de plusieurs méthodes statiques convertissant

  • des flux d'entrée ou de sortie en canaux en lecture ou écriture,
  • des canaux en lecture ou écriture en flux d'entrée ou de sortie,
  • des canaux en lecture ou écriture associés à des encodages de caractères en flux de caractères d'entrée ou de sortie.

Les canaux FileChannel sont spécialisés dans la manipulation des fichiers. A cet effet, ils implémentent des méthodes de lecture (read()), d'écriture (write()), de positionnement (position()), d'obtention de la taille et de troncature du fichier cible (size() et truncate()), mais aussi, et certainement les plus intéressantes, de mise en oeuvre d'un verrou sur le fichier courant (lock() et tryLock()). Des méthodes permettent également le transfert de données du canal courant vers un autre et vice versa (transferTo() et transferFrom()).

Un objet de type Pipe est constitué de deux canaux, l'un en lecture (Pipe.SourceChannel) et l'autre en écriture (Pipe.SinkChannel). Lorsque des données sont écrites dans le canal Pipe.SinkChannel, ces mêmes données sont lues d'une façon synchrone par le canal Pipe.SourceChannel.

Les objets SelectableChannel sont des canaux (DatagramChannel, Pipe.SinkChannel, Pipe.SourceChannel, ServerSocketChannel, SocketChannel) qui peuvent être sélectionnés par un sélecteur (objet Selector). Les canaux SelectableChannel doivent être prélablement enregistrés (register()) auprès d'un sélecteur, afin d'obtenir une clé de sélection (SelectionKey). Cette clé représentant le canal sélectionnable rejoindra d'autres clés au sein du sélecteur. De cette manière, un programme peut gérer un groupe de canaux, et déclencher un traitement lorsqu'un événement se produit sur l'un des canaux.

Les canaux ServerSocketChannel et SocketChannel consituent respectivement des tuyaux de communication vers un socket serveur et un socket client, utiles dans des applications réseaux. Les échanges asynchrones de tels systèmes, sont en général gérés par l'intermédiaire des sélecteurs de canaux, capables de sélectionner un canal à la moindre activité détectée sur un socket.

Sommaire