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
.
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.