Macht es denn Sinn, in einer Endlosschleife, jeweils immer wieder zu schliessen close()? Um dann bald wieder zu öffnen... (ca. alle sekunden)
Oder wäre es besser, wenn ich kein (new) in der Schleife habe, und dann erst schliesse, wenn die Schleife doch mal verlassen wird. (Beim schliessen des Programmes)
Durch das new hast du ein ständiges Öffnen. Es sind immer neue Reader. Was wir nicht sehen, ist der Stream - wenn dies immer der gleiche Stream ist und nicht immer ein neu geöffneter, dann hast Du ggf. ein Problem. Denn wenn der Reader geschlossen wird, dann wird auch der zugrunde liegende Stream geschlossen. So ein Pattern, dass ein Stream immer wieder nach außen gegeben wird, ist somit zumindest sehr fehleranfällig.
Und man muss auch aufpassen: Du hast einen BufferedReader - der kann also auch etwas zwischenspeichern. Wenn Du aus einem Stream mehrfach etwas lesen willst, dann bedeutet dies, dass Daten verloren gehen könnten. Fiktives Beispiel (Das ist so nicht!): Angenommen der BufferedReader liest immer 2 Zeilen auf einmal - auch wenn Du nur 1 Zeile brauchst. Das sieht dann so aus:
Stream hat etwas wie
a
b
c
d
Unser BufferedReader würde beim Lesen der ersten Zeile gleich a und b lesen und das a weiter geben. Beim lesen der nächsten Zeile hätte der BufferedReader diese schon und könnte das b zurück geben.
Nun machen wir die Schleife immer mit neuen BufferedReadern (von unserem spezial BufferedReader!)
Erster Schleifendurchlauf: Stream hat noch a-d, erster BufferedReader soll eine Zeile lesen, liest a und b. Gibt b zurück.
Nächster Schleifendurchlauf: Stream hat nur noch c-d, erster BufferedReader hätte im Buffer noch das b, wir machen aber ein neuen BufferedReader und lesen damit dann eine Zeile: Er liest c und d und gibt c zurück.
==> Es gehen also Daten verloren!
Daher ist die typische Vorgehensweise immer:
- Ich erzeuge den Reader
- Dann gehe ich in der Schleife diesen Reader durch, bis ich alles gelesen habe
- dann am Ende schließe ich den Reader
Aber es hängt immer an den Anforderungen - wenn ich eine Datei mit ganz vielen Zeilen habe und ich will diese immer wieder durchgehen: Dann habe ich natürlich eine Schleife, in der die Datei geöffnet wird, der Inhalt der Datei ausgewertet und dann die Datei geschlossen wird. Und dann wird das immer wieder erneut gemacht. Sowas ist denkbar. Aber das ist halt kein typischer Anwendungsfall sondern ein sehr spezieller ...
Aber kommen wir zurück zu Deinem Anwendungsfall: Was macht denn die Methode openStream? Vom Namen her, wird ja ein Stream geöffnet. Es kommt also immer ein neues Stream zurück. Das wäre also so durchaus ok - Beispiel wäre: In einer Schleife gehst Du alle Dateien eines Verzeichnisses durch und verarbeitest diese. Etwas in der Art.