Comment lire et écrire des flux d'octets

La lecture et l'écriture de flux binaires est l'une des tâches d'E / S les plus courantes qu'une application Java peut effectuer. Il peut être effectué en regardant chaque octet individuel dans un flux ou en utilisant une approche tamponnée plus structurée.

Remarque: Cet article examine la lecture de données binaires à partir d'un

example.jpg
fichier. Si vous essayez ce code, remplacez simplement le nom du
example.jpg
avec le chemin et le nom d'un fichier jpeg sur votre ordinateur.

Octet par octet

le

java.io
La classe a été la première API Java à fournir des fonctionnalités d'entrée / sortie. Il a deux méthodes qui peuvent être utilisées pour entrer et sortir des flux d'octets (blocs de 8 bits) depuis et vers un fichier. Ces classes sont les
FileInputStream
et
FileOutputStream
. Ces méthodes fournissent une méthode d'E / S de base en permettant à un fichier d'être entré ou sorti un octet à la fois. En pratique, il est préférable d'utiliser une méthode tamponnée pour les flux binaires, mais il est bon de regarder le bloc de construction le plus basique de la fonctionnalité d'E / S Java.

Remarquez comment nous plaçons la gestion des E / S dans un

essayez, attrapez, enfin
block-c'est pour s'assurer que nous gérons les exceptions d'E / S et pour fermer correctement les flux. Le bloc catch affichera toutes les exceptions d'E / S qui se produisent et affichera un message pour l'utilisateur. Dans le bloc enfin, il est important de fermer les flux explicitement en appelant la méthode close sinon ils resteront ouverts et un gaspillage de ressources. Il y a une vérification pour voir si le
FileInputStream
et
FileOutputStream
sont nuls avant de tenter de fermer. En effet, une erreur d'E / S peut se produire avant l'initialisation des flux. Par exemple, si le nom de fichier est incorrect, le flux ne sera pas ouvert correctement.
essayer
bloc, nous pouvons ajouter du code à lire dans les octets:
lis
la méthode lit dans un octet de la
FileInputStream
et la méthode d'écriture écrit un octet dans le
FileOutputStream
. Lorsque la fin du fichier est atteinte et qu'il n'y a plus d'octets à saisir, la valeur -1 est renvoyée.

Maintenant que Java 7 est sorti, vous pouvez voir l'avantage de l'une de ses nouvelles fonctionnalités: le bloc Try with Resources. Cela signifie que si nous identifions les flux au bloc try au début, il gérera la fermeture du flux pour nous. Cela élimine le besoin du bloc finally dans l'exemple précédent:

La liste complète des codes Java pour les deux versions du programme de lecture d'octets se trouve dans l'exemple de code de flux binaire.