Question

J'ai une question dans mon esprit que, lors de l'écriture dans le fichier, avant la fermeture se fait, doit-on inclure flush () ??. Si oui ce qu'il va faire exactement? Do not flux chasse d'auto ?? EDIT:

Alors débusquer ce qu'il fait faire?

Était-ce utile?

La solution

Les auteurs et les flux tampon habituellement certaines de vos données de sortie en mémoire et essayer de l'écrire dans les grands blocs à la fois. rinçage provoquera une écriture immédiate sur le disque de la mémoire tampon, donc si le programme se bloque que les données ne seront pas perdues. Bien sûr, il n'y a aucune garantie, que le disque ne peut pas écrire physiquement les données immédiatement, il pourrait encore être perdu. Mais ce ne serait pas la faute du programme Java:)

PrintWriters flush automatique (par défaut) lorsque vous écrivez une fin de ligne et de flux de cours et des tampons à chasse d'eau lorsque vous les fermer. En dehors de cela, il y a rinçage que lorsque le tampon est plein.

Autres conseils

Je recommande vivement d'appeler flush avant la fermeture. Fondamentalement, il écrit les données restantes bufferized dans le fichier.

Si vous appelez explicitement flush vous pouvez être sûr que tout IOException sort de close est vraiment catastrophique et lié à libérer les ressources du système.

Lorsque vous vous flush, vous pouvez gérer son IOException de la même manière que vous gérez vos données écrire des exceptions.

Vous n'avez pas besoin de faire une chasse d'eau, car close () le fera pour vous.

De la javadoc:

« Fermez le flux, le rinçant premier. Une fois qu'un flux a été fermé, plus write () ou invocations flush () provoquera une IOException être jeté. La fermeture d'un flux précédemment fermé, cependant, n'a pas d'effet. »

Pour répondre à votre question à ce flush ne fait, il veille à ce que tout ce que vous avez écrit au flux - un fichier dans votre cas - ne se fait écrire dans le fichier, puis il.

Java peut effectuer tamponnage ce qui signifie qu'il tiendra sur les données écrites en mémoire jusqu'à ce qu'il ait une certaine quantité, puis écrire tout le fichier en une seule qui est plus efficace. L'inconvénient est que le fichier est pas nécessairement à un moment donné une mise à jour. Chasse d'eau est une façon de dire « faire la mise à jour du fichier.

Fermer les appels d'abord affleurant à faire en sorte que après la fermeture du fichier a ce que vous attendez à y voir, par conséquent, comme d'autres l'ont souligné, pas besoin de rincer avant de fermer.

Fermer vide automatiquement. Vous n'avez pas besoin de l'appeler.

Il est inutile d'appeler flush () juste avant sa fin (), comme d'autres ont dit. Le temps d'utiliser flush () si vous souhaitez conserver le fichier ouvert, mais veulent faire en sorte que les écritures précédentes ont été complètement remplis.

Comme dit, vous avez besoin généralement pas rincer.

si, pour une raison quelconque, vous voulez un autre processus pour voir le contenu complet d'un fichier que vous travaillez avec, il n'a de sens sans le fermer. Par exemple, il pourrait être utilisé pour un fichier qui est modifié simultanément par plusieurs processus, mais avec beaucoup de soins: -)

FileWriter est une classe mal car il prend tout le jeu de caractères se trouve être là, plutôt que de prendre un charset explicite. Même si vous ne voulez la valeur par défaut, être explicite à ce sujet.

La solution habituelle est OutputStreamWriter et FileOutputStream. Il est possible pour le décorateur de lancer une exception. Par conséquent, vous devez être en mesure de fermer le flux même si l'auteur n'a jamais été construit. Si vous allez le faire, il vous suffit de rincer l'auteur (dans le cas heureux) et toujours fermer le flux. (Juste pour être source de confusion, certains décorateurs, par exemple pour fermetures à glissière de manutention, ont des ressources qui ne nécessitent la fermeture.)

Un autre cas d'utilisation pour le rinçage dans le programme est écrit progrès de longrunning travail dans le dossier (il peut donc être arrêté et redémarré plus tard. Vous voulez être sûr que les données sont en sécurité sur le lecteur.

while (true) {
  computeStuff();
  progresss += 1;
  out.write(String.format("%d", progress));
  out.flush();
}
out.close();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top