Pourquoi devons-nous fermer un FileInputStream (et les flux en général) ? en tout état de cause avant de quitter le programme ? Que se passerait-il sinon ? Si le programme s'arrête avant que le flux d'entrée ne soit fermé explicitement dans le programme, le flux ne se ferme-t-il pas aussi automatiquement ?
Réponses
Trop de publicités?Les gestionnaires de fichiers sont des ressources rares et limitées. Vous pouvez en manquer si vous ne les nettoyez pas correctement, tout comme les connexions aux bases de données.
Si vous avez écrit un petit programme avec un seul utilisateur, vous pouvez vous permettre d'être négligent et de ne pas fermer dans un bloc finally.
Mais si vous finissez par utiliser cet idiome dans une application qui a beaucoup d'utilisateurs et de gestionnaires de fichiers, vous risquez d'avoir un problème.
"Nous faisons d'abord nos habitudes, puis ce sont elles qui nous font. J'essaie d'appliquer les meilleures pratiques même lorsqu'elles ne sont pas nécessaires.
Mec. Si vous ne fermez pas votre flux, votre test unitaire échouera. Ou du moins, il devrait échouer. C'est pourquoi vous devez le fermer ;)
Et bien que le système d'exploitation nettoiera presque certainement les fichiers si vous les quittez, ils seront généralement libérés plus rapidement si vous les fermez explicitement. En outre, que se passe-t-il si votre code se retrouve un jour dans un programme qui s'exécute depuis longtemps ? Ils auront alors des problèmes et vous maudiront :(
C'est comme se laver les mains après être allé aux toilettes. Un jour ou l'autre, quelqu'un paiera le prix si vous ne le faites pas. Vous pouvez vous en tirer pendant un certain temps, mais c'est toujours une bonne pratique.
En plus de la réponse de Jon, c'est généralement une bonne idée de fermer une ressource.
Pensez à une connexion à une base de données. Votre base de données ne peut pas avoir une infinité de connexions ouvertes, dans ce cas, lorsque vous n'en avez pas besoin, il est préférable de la fermer dès que vous avez terminé.
Il est également bon d'en faire une habitude. Le bloc "finally" est votre ami. Dans le cas de C++, vous pouvez également utiliser RAII pour gérer cela automatiquement .
En quelque sorte. Le flux est soutenu par un "vrai" descripteur de fichier du système d'exploitation, et lorsque le processus se termine, le système d'exploitation nettoie tous les descripteurs de fichier ouverts.
Quoi qu'il en soit, il est de bonne pratique de toujours fermer vos ressources lorsque vous avez terminé, donc fermez les flux :)