Java IO (JavaSE 6) - Hilfe versteht ich die Auswirkungen meiner Probe Verwendung von Streams und Schriftsteller

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

  •  19-09-2019
  •  | 
  •  

Frage

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

Lassen Sie mich sehen, ob ich das verstehen: Ein Byte Ausgangsstrom für Datei „out.txt“ geöffnet wird. Es wird dann zu einem gepufferten Ausgangsstrom zugeführt, um Dateioperationen schneller zu machen. Der gepufferte Strom wird zu einem Ausgangsdatenstrom-Schreiber zugeführt von Bytes, um Zeichen zu überbrücken. Schließlich ist der Autor dieses Artikels auf eine gepufferte Schreiber zugeführt ..., die eine weitere Ebene der Pufferung fügt?

Hmm ...

War es hilfreich?

Lösung

Ja, Sie sind richtig.

Ich denke, in diesem Fall, dass Sie viel kürzer machen könnten (siehe auch BufferedWriter )

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

oder wenn Sie schöne Druckfunktionen wollen:

Printwriter out = new Printwriter (neu BufferedWriter (neue Filewriter ( "foo.out")));

Es ist möglich, dass der FileWriter seine eigene Verpackung schafft, aber diese Klasse weiß, welche Art und Weise am besten ist.

In Java-Streams und Schriftsteller sind Wrapper, damit Sie sie an Ihre eigenen Bedürfnisse (durch Stapeln sie wie Sie tun) zusammenstellen können. Die Klassen schauen nicht auf welche Art von Strom / Schreiber stapeln sie auf. In Ihrem Fall mit mehreren Puffer bedeutet, dass Sie tatsächlich zwei Puffer haben, in zwei verschiedenen Klassen. Das heißt, sie werden etwas mehr Speicher benötigen und möglicherweise einige Performance-Verlust, aber wahrscheinlich werden Sie nicht bemerken (weil es nur ein wenig Aufwand im Vergleich zu anderen Leistungsfaktoren ist).

Andere Tipps

Dies ist ein Beispiel für das Dekorateur Muster . Die Idee ist, Funktionalität zu einer Klasse hinzuzufügen, ohne die Klasse zu ändern. In Ihrem Beispiel haben Sie eine Filewriter. Sie wollen, was Sie werden gepuffert (gute Idee, wenn es über das Netzwerk ist) schreiben zuerst vor dem Schreiben. So Sie BufferedWriter oben auf Filewriter Schicht. Andere Apps können wollen nicht die Daten gepuffert werden, damit die Entwickler keinen BufferedWriter hinzufügen müssen.

Wir können nicht antizipieren, was alle Entwickler benötigen. Angenommen, Sie müssen rot13 Ihre Daten, jetzt stattdessen Filewriter modifizieren, erstellen Sie eine Klasse Anruf Rot13Writer dass Geräte Writer. Die Rot13Writer wird eine Instanz von Writer statt und wird rot13 zuführen, bevor es auf den nächsten Schriftsteller vorbei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top