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.jpgfichier. Si vous essayez ce code, remplacez simplement le nom du
example.jpgavec le chemin et le nom d'un fichier jpeg sur votre ordinateur.
le
java.ioLa 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
FileInputStreamet
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, enfinblock-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
FileInputStreamet
FileOutputStreamsont 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.
essayerbloc, nous pouvons ajouter du code à lire dans les octets:
lisla méthode lit dans un octet de la
FileInputStreamet 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.