Réponses:
D'après la documentation de la flush
méthode:
Vide le flux de sortie et force l'écriture de tous les octets de sortie mis en mémoire tampon. Le contrat général de flush est que son appel est une indication que, si des octets précédemment écrits ont été mis en mémoire tampon par l'implémentation du flux de sortie, ces octets doivent immédiatement être écrits vers leur destination prévue.
La mise en mémoire tampon est principalement effectuée pour améliorer les performances d'E / S. Pour en savoir plus, consultez cet article: Réglage des performances d'E / S Java .
Lorsque nous donnons une commande, les flux de cette commande sont stockés dans l'emplacement de mémoire appelé buffer (un emplacement de mémoire temporaire) dans notre ordinateur. Lorsque tout l'emplacement de la mémoire temporaire est plein, nous utilisons flush (), qui vide tous les flux de données et les exécute complètement et donne un nouvel espace aux nouveaux flux dans l'emplacement temporaire du tampon. -J'espère que vous comprendrez
BufferedOutputStream
, BufferedWriter
, ObjectOutputStream,
et les PrintXXX
classes. La flush()
méthode de tout autre flux ou Writer
ne fait rien.
flush()
explicite n'est pas obligatoire pour a BufferedWriter
, tant que vous êtes close()
l'auteur. close()
exécute un flush lui-même.
close()
appels flush()
, donc appeler les deux est redondant lors de l'utilisation FileWriter
sans tampon.
Lorsque vous écrivez des données dans un flux, elles ne sont pas écrites immédiatement et elles sont mises en mémoire tampon. Utilisez donc flush()
lorsque vous devez être sûr que toutes vos données du tampon sont écrites.
Nous devons nous assurer que toutes les écritures sont terminées avant de fermer le flux, et c'est pourquoi il flush()
est appelé dans le fichier / rédacteur en mémoire tampon close()
.
Mais si vous avez besoin que toutes vos écritures soient enregistrées à tout moment avant de fermer le flux, utilisez flush()
.
FilterOutputStream
et FilterWriter
.
Si la mémoire tampon est pleine, toutes les chaînes qui y sont mises en mémoire tampon seront enregistrées sur le disque. Les tampons sont utilisés pour éviter les grosses affaires! et les frais généraux.
Dans la classe BufferedWriter qui est placée dans les bibliothèques java, il y a une ligne comme:
private static int defaultCharBufferSize = 8192;
Si vous souhaitez envoyer des données avant que la mémoire tampon ne soit pleine, vous avez le contrôle. Rincez-le. Les appels à writer.flush () disent: "Envoyez tout ce qui est dans le tampon, maintenant!
livre de référence: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
pages: 453
Les flux sont souvent accédés par des threads qui vident périodiquement leur contenu et, par exemple, l'affiche à l'écran, l'envoie vers une socket ou l'écrit dans un fichier. Ceci est fait pour des raisons de performances. Le vidage d'un flux de sortie signifie que vous souhaitez arrêter, attendre que le contenu du flux soit complètement transféré vers sa destination, puis reprendre l'exécution avec le flux vide et le contenu envoyé.
Pour des problèmes de performances, les premières données doivent être écrites dans Buffer. Lorsque la mémoire tampon est pleine, les données sont écrites sur la sortie (fichier, console, etc.). Lorsque le tampon est partiellement rempli et que vous voulez l'envoyer vers la sortie (fichier, console), vous devez appeler la méthode flush () manuellement afin d'écrire le tampon partiellement rempli vers la sortie (fichier, console).