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).
Classe | Description |
---|---|
Channels | contient des méthodes utilitaires pour les canaux et les flux. |
DatagramChannel | contient des canaux sélectionnables pour les sockets orientés datagrammes. |
FileChannel | contient un canal pour la lecture, l'écriture, le mapping et la manipulation des fichiers. |
FileChannel.MapMode | contient une énumération sans restriction de type (typesafe) pour les modes de fichier mappé. |
Pipe | contient une paire de canaux qui implémente un canal unidirectionnel. |
Pipe.SinkChannel | contient un canal représentant la capacité d'écriture d'un objet Pipe. |
Pipe.SourceChannel | contient un canal représentant la capacité en lecture d'un objet Pipe. |
SelectableChannel | contient un canal qui peut être multiplexé via un objet Selector. |
ServerSocketChannel | contient un canal sélectionnable pour les flux écoutant des sockets. |
SocketChannel | contient un canal sélectionnable pour les flux connectés sur des sockets. |
La classe Channels dispose de plusieurs méthodes statiques convertissant
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