Java Io est un grand point de connaissance.
Si vous décomposez ses points de connaissance et en parlez, ce sera probablement une semaine. Pour le système IO, vous pouvez jeter un œil à l'image suivante.
Ensuite, commençons par un morceau de code, jetons un coup d'œil au code suivant
Public Class Test {public static void main (String [] args) lève une exception {file file = new File ("text.txt"); if (! file.exists ()) {file.createenewfile (); } FileOutputStream fos = new FileOutputStream (fichier); BufferedOutputStream bos = new BufferedOutputStream (FOS); octet [] b = nouveau octet [1024]; bos.write (b); bos.flush (); }} Un flux tamponné est construit dans le code, puis une données de longueur de KB est écrite dans le flux, et enfin la méthode Flush () est appelée.
Il s'agit d'un morceau de code très simple, et la sortie finale consiste à générer un fichier de texte 1KB.
Mais si nous commençons la dernière ligne
//bos.flush ();
La taille finale du texte généré. Le texte deviendra 0.
Ce résultat est très évident, mais si nous changeons Flush () pour clôturer (), le résultat sera-t-il toujours 0?
À propos de Flush
Flush () se trouve en fait dans la transmission du réseau il y a longtemps
À ce moment-là, pour l'efficacité, le serveur et le client ne transmettraient pas un morceau de données à chaque fois qu'il était généré.
Au lieu de cela, un tampon sera créé et les données seront transférées au client une fois le tampon complet.
Parfois, il y a un tel problème. Lorsque les données ne sont pas suffisantes pour remplir le tampon et que les données doivent être transmises au client, afin de résoudre ce problème, il existe un concept de rince et les données du tampon sont forcées d'être envoyées.
Pour en revenir à la question ci-dessus, est-il possible de remplacer la chasse d'eau
La réponse est oui.
Si vous regardez le code source, vous connaîtrez la relation d'héritage de BufferedOutputStream
classe publique BufferOutputStream étend FilteroutputStream
BufferedOutputStream n'implémente pas la méthode Close (), il appellera donc directement la close () de filterOutputStream, et la méthode close () de filterOtputStream appellera flush () pour produire les données de tampon.
Dans le développement réel, concernant les opérations IO, il est souligné que la méthode close () doit être appelée à la fin. L'exemple ci-dessus est l'une des raisons.