web-dev-qa-db-fra.com

FileOutputStream: la méthode "close" appelle-t-elle également "flush"?

Je suis vraiment confus au sujet de la méthode flush et close. Dans mon code, je ferme toujours mon objet FileOutputStream. Mais je veux savoir que si je dois utiliser la méthode de vidage ici, et où puis-je l'utiliser?

J'écrirai un projet qui télécharge 4 ou 5 fichiers à plusieurs reprises. Je vais écrire une méthode (pour télécharger des fichiers) et ma méthode sera en boucle et télécharger des fichiers à plusieurs reprises.Ma méthode aura un code comme celui-ci.

La méthode close appelle-t-elle flush, ou dois-je utiliser le vidage avant de fermer?

try {
    InputStream inputStream = con.getInputStream();
    FileOutputStream outputStream = new FileOutputStream("C:\\programs\\TRYFILE.csv");

    int bytesRead = -1;
    byte[] buffer = new byte[4096];
    while ((bytesRead = inputStream.read(buffer)) != -1) {
    outputStream.write(buffer, 0, bytesRead);
}

} catch(Exception e) {
    //
} finally {
    outputStream.close();
    inputStream.close();
}    

Notez que le code fonctionne bien: il télécharge le fichier avec succès. Mais je ne suis pas sûr d'utiliser flush.

20
javauser35

La méthode flush est utilisée pour "vider" les octets conservés dans un tampon. FileOutputStream n'utilise aucun tampon, donc la méthode flush est vide. L'appeler ou non ne change pas le résultat de votre code.

Avec les écrivains tamponnés, la méthode close appelle explicitement flush.

Vous devez donc appeler flush lorsque vous souhaitez écrire les données avant de fermer le flux et avant que le tampon ne soit plein (lorsque le tampon est plein, l'écrivain commence à écrire sans attendre un appel flush).

Le code source de la classe FileOutputStream n'a pas de version personnalisée de la méthode flush. La méthode flush utilisée est donc la version de sa super classe OutputStream. Le code de vidage dans OutputStream est le suivant

public void flush() throws IOException {
}

Comme vous le voyez, c'est une méthode vide qui ne fait rien, donc l'appeler ou non est la même chose.

27