:: Enseignements :: Master :: M1 :: 2011-2012 :: Programmation d'Applications Réseaux ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | ByteBuffer, DatagramChannels |
Exercice 1 - Longue Somme de Long ByteBuffer
-
Refaire l'exercice 1 du TD précédent (avec le serveur multi-client) en utilisant des ByteBuffer plutôt que des tableaux de bytes ainsi que des DatagramChannel. Est-il nécessaire d'utiliser les fonctions de conversion entre long et tableaux d'octets antérieurement écrites ?
Exercice 2 - Transcode moi
On souhaite écrire la classe FileTranscoder qui effectue la conversion de fichier d'un jeu de caractères à un autre.
Elle s'utilise ainsi en ligne de commande (pour convertir un fichier source en UTF-8 en un fichier destination en ISO-8859-1) :
java FileTranscoder srcFile.txt UTF-8 dstFile.txt ISO-8859-1
Dans cet exemple, le transcoder lit le fichier srcFile.txt qui est écrit en UTF-8 et transforme celui-ci en ISO-8859-1 dans le fichier créé de nom dstFile.txt. Si le fichier source indiqué est un tiret, nous lisons sur l'entrée standard (même remarque pour le fichier destination - qui implique d'écrire sur la sortie standard).
-
Vous utiliserez des FileChannel pour lire et écrire dans les fichiers. Utiliser la classe java.nio.charset.Charset pour obtenir les charsets puis créer l'encodeur ou le décodeur correspondant.
-
En supposant que les fichiers soient suffisament petits pour "tenir" dans un ByteBuffer, utilisez les méthodes decode(ByteBuffer) et encode(CharBuffer). Que se passe-t-il si le fichier est trop gros ? Testez avec de petits buffers.
-
Utilisez les méthodes decode(ByteBuffer, CharBuffer, boolean) et encode(CharBuffer, ByteBuffer, boolean) dans une boucle de décodage - encodage. Il faudra judicieusement choisir la taille de chacun des buffers manipulés.
-
Ajoutez des caractères "unmappable" dans le fichier d'entrée. Que se passe t-il par defaut ? Faites une version où une exception est levée, puis une version où le caractère non valide est remplacé par un caractère choisi ($ par exemple).
© Université de Marne-la-Vallée