:: Enseignements :: Master :: M1 :: 2015-2016 :: Programmation d'applications réseaux ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Manipulation de base des buffers, jeux de caractères et endianness |
Exercice 1 - Lecture et écriture d'un fichier
La classe
FileInspector ci-dessous permet d'afficher sur la sortie
standard la valeur de chaque octet lu dans un fichier texte, ainsi que la
valeur du caractère associé dans le code ASCII.
Testez le fonctionnement de cette classe avec un fichier simple contenant
des caractères ASCII, comme par exemple le fichier
toto.txt
suivant:
En vous inspirant de ce code, écrivez une nouvelle classe
DoubleByteFileWriter
dont la méthode
main aura pour objectif d'écrire dans un fichier de sortie le
contenu d'un fichier d'entrée en ayant "doublé" chaque occurrence d'un octet fixé
(défini en tant que constante dans la classe). Par exemple, si cet octet est
65, le
code ASCII du caractère 'A', alors l'exécution de la commande
% java fr.upem.file.DoubleByteFileWriter toto.txt toto.2A.txt
devrait produire le fichier
AABC
abc
123
AAAAAAAAAAAA
Exercice 2 - Encodage
On souhaite maintenant écrire une classe StoreWithEncoding dont
la méthode main accepte deux arguments sur la ligne de commande:
le nom d'un jeu de caractère, et le nom d'un fichier. La fonction doit alors
lire ligne par ligne le texte saisi sur l'entrée standard et l'écrire dans le fichier
dont le nom est fourni en utilisant l'encodage préconnisé.
Par exemple, l'exécution suivante (le
^D à la fin représente la séquence
Control-D pour fermer le flot d'entrée)
% java fr.upem.file.StoreWithEncoding ascii ascii.txt
bla bla
Voila un petit texte
^D
doit produire un fichier de nom
ascii.txt contenant:
bla bla
Voila un petit texte
Essayez également avec
% java fr.upem.file.StoreWithEncoding UTF-8 utf8.txt
bla bla
Texte accentué éàèî
et même symbole €
et avec le même texte en ISO-8859-15 et en ISO-8859-1.
Exercice 3 - Endianness
Sur le même principe que l'exercice précédent, on souhaite écrire une classe
StoreWithByteOrder qui lit des entiers long sur l'entrée standard
et qui les écrit octet par octet dans un fichier. L'ordre (little endian
ou big endian) d'écriture des octets dans le fichier doit être celui
spécifié sur la ligne de commande par LE ou BE juste avant le nom du fichier.
Par exemple, les commandes
% java fr.upem.file.StoreWithByteOrder BE long-be.txt
1
^D
et
% java fr.upem.file.StoreWithByteOrder LE long-le.txt
1
^D
doivent produire deux fichiers différents. Pour savoir ce que contiennent ces
fichiers, vous pouvez utiliser la classe
FileInspector du premier exercice.
Si vous rentrez la valeur 255, comment est-elle représentée dans le fichier?
Que vous affiche la classe FileInspector?
© Université de Marne-la-Vallée