US

Les fichiers binaires

Jusqu'à présent, on s'est intéressé à la lecture et à l'écriture de fichiers textes. On va maintenant survoler un petit peu les fichiers binaires pour voir les classes de la librairie standard de Java qui permettent leur gestion. On ne va pas entrer de trop dans les détails car il faudrait avant tout mieux comprendre le format binaire.

On va simplement se concentrer sur la lecture de fichiers binaires et surtout comprendre les concepts de base. Voyons par exemple comment lire un fichier BMP. Pour rappel, un fichier est constitué de bits (0 ou 1) qui sont groupés en blocs de 8 appelés des octets (bytes en anglais) et Java propose justement un type primitif codé sur 8 bits, le type primitif byte.

Les opérations de lecture et d'écriture sur des fichiers binaires consistent donc en la manipulation d'octets, on va avoir des méthodes pour lire et écrire une série d'octets représentés par des tableaux de byte : byte[].

Le format BMP

Voyons à quoi ressemble un fichier BMP, à savoir sa structure (Le format BMP). On peut voir qu'une image BMP est constituée de quatre parties :

  1. Entête du fichier
  2. Entête de l'image
  3. Palette de l'image
  4. Corps de l'image

On va ici seulement s'intéresser à l'entête du fichier qui fait 14 octets de long. La figure suivante montre cette entête et son découpage.

Entête d'un fichier BMP
fig j12.5 Entête d'un fichier BMP

On voit que l'entête du fichier est constituée de quatre blocs :

  1. Type de fichier (string sur 2 octets)
  2. Taille du fichier en octets (entier sur 4 octets)
  3. Champ réservé pour utilisation future (sur 4 octets)
  4. Offset en octets (entier sur 4 octets)

Le premier champ est une chaine de 2 caractères qui représente le type de fichier (BM pour un bitmap Windows, ...). Le second champ indique la taille du fichier en octets et est codé comme un entier sur 4 octets. Le troisième champ ne signifie rien, c'est juste une place réservée pour une éventuelle utilisation future et enfin le dernier champ représente la position à partir de laquelle les informations concernant l'image sont placés dans le fichier.

Lecture de fichier binaire

La première étape pour lire un fichier binaire est comme toujours de créer l'objet approprié, on va utiliser la classe FileInputStream. Il ne faut pas oublier de gérer l'exception FileNotFoundException qui est levée au cas où le fichier n'existe pas et l'exception IOException qui apparait pour tout problème d'entrée-sortie. De plus, on doit également appeler la méthode close pour libérer les ressources quand on a fini de lire le fichier.