Java IO (JavaSE 6) - Aidez-moi à comprendre les effets de mon exemple d'utilisation des cours d'eau et des écrivains

StackOverflow https://stackoverflow.com/questions/2243441

  •  19-09-2019
  •  | 
  •  

Question

BufferedWriter out = new BufferedWriter( new OutputStreamWriter( new BufferedOutputStream( new FileOutputStream("out.txt") ) ) );

Alors, laissez-moi voir si je comprends: Un flux de sortie d'octets est ouvert pour le fichier « out.txt ». Il est ensuite introduit dans un flux de sortie en mémoire tampon pour accélérer les opérations de fichiers. Le courant tampon est amené à un auteur de flux de sortie pour combler d'octets de caractères. Enfin, cet écrivain est envoyé à un écrivain tampon ... ce qui ajoute une autre couche de tampon?

Hmm ...

Était-ce utile?

La solution

Oui, vous avez raison.

Je pense que dans ce cas, vous pouvez faire beaucoup plus court (voir aussi BufferedWriter )

BufferedWriter out = new BufferedWriter(new FileWriter("foo.out"));

ou si vous voulez que les fonctions d'impression agréable:

PrintWriter out = new PrintWriter (nouveau BufferedWriter (nouveau FileWriter ( "foo.out")));

Il est peut-être que le FileWriter crée son propre emballage, mais cette classe saura de quelle manière est la meilleure.

En Java Streams et écrivains sont wrappers afin que vous puissiez les assembler à vos propres besoins (au moyen de les empiler comme vous le faites). Les classes ne regardent pas ce type de flux / écrivain ils empilent sur. Dans votre cas ayant plusieurs tampons signifie que vous avez en fait deux tampons, dans deux classes différentes. Cela signifie qu'ils vont prendre un peu de mémoire supplémentaire et peut-être une certaine perte de performance, mais plus probablement vous ne remarquerez ce (car il est seulement un peu de frais généraux par rapport à d'autres facteurs de performance).

Autres conseils

Ceci est un exemple de la rot13 vos données, maintenant au lieu de modifier FileWriter, vous créez un appel de classe Rot13Writer qui implémente Writer. Le Rot13Writer prendra une instance de l'écrivain et interprétera rot13 avant de le transmettre à l'autre écrivain.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top