Buffers et Channel JAVA NIO. Usage pour la manipulation des fichiers
- Comprendre l'usage des buffers et channels de JAVA NIO.
Ce TP vous demande:
- (Exercice 1) d'importer sur Eclipse (ou votre IDE favori) les projets que l'on utilisera pour tous les TPs de partie JAVA NIO,
- (Exercice 2) de réaliser un exercice de manipulation de fichiers pour assimiler l'usage des buffers et channels de JAVA NIO qui seront utilisés plus tard pour la communication sur le réseau,
- (Exercice 4) de démarer votre devoir maison,
- (Exercices 3 optionnel) et si vous avez le temps, de réaliser un autre exercice de manipulation de fichiers.
Installation des fichiers pour tous les TPs de la partie JAVA NIO
Commencez par cloner le projet csc4509-javanio hébergé sur gitlabens:
Importez ce projet maven dans Eclipse (ou votre IDE favori). Pour Eclipse, il faut passer par le menu: File -> Import -> Maven -> Existing Maven Project et ensuite naviguer jusqu'au répertoire racine du projet que vous venez de cloner.
Lecture d'un fichier avec Java NIO
Cet exercice consiste à afficher à l'écran le contenu d'un fichier du système de fichier, un peu comme ce que fait la commande cat.
Pour cela, compléter le code de classe CatFile contenue dans le projet csc4509-1-file-javanio en réalisant les étapes suivantes :
- ouvrir, en lecture seule, le fichier dont le nom est passé sur la ligne de commande,
- obtenir un canal associé à ce fichier,
- obtenir un canal associé au fichier standard de sortie System.out,
- allouer un ByteBuffer de 1024 octets,
- réaliser une boucle de lecture des octets du fichier dans le ByteBuffer et la réécriture de ces octets sur le fichier standard de sortie.
Il est possible d'obtenir un canal sur les Stream qui sont déjà ouverts. La classe Channels proposent deux méthodes de classes pour cela:
Pour obtenir un canal lié à System.out on peut donc utiliser:
Copie d'un fichier dans un autre (optionnel)
Cet exercice consiste à améliorer la version du programme de l'exercice précédent: en vous inspirant de l'étape précédente, réalisez le programme qui copie le contenu du fichier dont le nom est passé en premier argument dans le fichier dont le nom est passé en second argument.
Pour cela, compléter le code de classe CopyFile contenue dans le projet csc4509-1-file-javanio
Testez votre programme avec un gros fichier (/vmlinuz ou /boot/vmlinuz par exemple) en vérifiant avec la commande cmp que la copie et l'original sont bien identiques.
$Date: 2021-04-25 17:56:54 +0200 (dim. 25 avril 2021) $