Les réponses déjà fournies donnent des indications intéressantes que je vais essayer de compiler ici.
Closeable
y Flushable
étant deux caractères indépendants, Closeable
ne précisent pas que close()
devrait appeler flush()
. Cela signifie que c'est à la documentation (ou au code) de l'implémentation de préciser si flush()
est appelé ou non. Dans la plupart des cas, c'est la norme, mais il n'y a aucune garantie.
Maintenant, en ce qui concerne ce que @Fabian a écrit : Il est vrai que java.io.PrintWriter
's close()
ne fait pas appel à la méthode flush()
. Cependant, il appelle out.close()
( out
étant l'auteur sous-jacent). En supposant que out
es un BufferedWriter
nous allons bien depuis BufferedWriter.close()
est en train de tirer la chasse d'eau (d'après son doc). Si c'était un autre écrivain, ce ne serait peut-être pas le cas...
Vous avez donc deux choix :
- soit vous vous assurez qu'au moins un Writer/Stream interne se vide de lui-même (attention en cas de refactoring du code),
- ou vous appelez simplement
flush()
et vous êtes toujours du bon côté.
La solution 2, qui demande moins de travail, est celle que je préfère.
1 votes
Cette question peut vous aider un peu [voir ceci] [1] [1] : stackoverflow.com/questions/7300676/when-to-use-flush-in-java
7 votes
@Siva :
as per the Javadoc
. Citation et lien, ou ça n'existe pas. Pour autant que je sache, algunos Les implémentations de flux se videront à la fermeture, tandis que d'autres ne le feront pas. Prouvez-moi que j'ai tort si ce n'est pas le cas et que la Javadoc dit le contraire.3 votes
Même question que haylem. J'ai lu la documentation de l'API Java de quelques classes et certaines disent que
flush()
est appelé dansclose()
tandis que d'autres ne font aucun commentaire à ce sujet. Un lien ?