Input/Output close() bei mehreren Streams

firefexx

Mitglied
Hi,

ich habe mal eine kurze Frage:
Wenn ich mehrere übereinandergestülpte (wie ist da eigentlich der Fachterminus??) Streams habe und fertig geschrieben oder gelesen habe, muss ich dann für jeden eine close() Methode aufrufen oder nur für einen. Und wenn ja welchen?

Also zu Beispiel
Java:
FileOutputStream fos = new FileOutputStream(f);
ObjectOutputStream oos = new ObjectOutputStream(fos);
// ... do something ...
// und jetzt wie schließen? 1, 2 oder 3
/* 1 */ fos.close();
/* 2 */ oos.close();
/* 3 */ fos.close(); oos.close(); // oder in anderer reihenfolge

Hoffe ihr könnt mir da schnell weiterhelfen. :)

VG
 

Volvagia

Top Contributor
Gewrapplete? ???:L
Nein, der Wrappler ruft automatisch close vom internen Stream auf.

Java:
public void close() throws IOException {
	flush();
	clear();
	bout.close();
}
public void close() throws IOException {
	flush();
	out.close();
}
 

turtle

Top Contributor
Im Grund solltest Du alle Streams löschen,es sei denn Du weisst irgendwoher dass der Eine den Anderen bereits schliesst (Fachterminus meiner Meinung Wrapper-Klasse, weil ein Stream den anderen wrappt (umwickelt).

Daher sehe ich auch (im Sourcecode), dass der ObjectOutputStream in seiner close()-Methode den gewrappten Stream selber auch schliesst. Daher wäre es ausreichend nur diesen zu schliessen. Da man sich das aber kaum merken kann und nicht jedesmal in den Code schaut, ist es gute Praxis alle Streams selber zu schliessen.

Man sollte aber NICHT einfach close() aufrufen, sondern aufpassen dass eine Exception geworfen worden sein könnte und daher ein Stream noch auf null steht. Bei Dir könnte zum Beispiel new FileOutputStream(f); eine Exception werfen und oos bleibt null. Daher gäbe es dann eine NPE. Besser daher zu prüfen: if (oos != null) oos.close(). Derartige Aufräumarbeiten gehören daher in einen finally-Block einer try-Anweisung

Unter Java-7 gibt es auch dafür das Konstrukt try-with-resources wo die close()-Methoden automatisch aufgerufen werden.
 
D

despikeexd

Gast
also so mal spontan würd ich zwischen gewraptem und verschachteltem stream pendeln was allerdings übersetzt beides das selbe bedeutet und daher gleichwertig wäre

was das manuelle closen der einzelnen ebenen angeht

so lange man einen STANDARD-Stream der JavaSE API nutz so wird *abgesehen vom AutoCloseable* von jedem "höheren" stream der "darunter liegende" automatisch geclosed
man kann sich das mal mit nem JarOutputStream veranschaulichen

wenn man alles mal aus ein ander nehmen würde würde das so aussehen

JarOutputStream(ZipOutputStream(DeflaterOutputStream(FilterOutputStream(FileOutputStream))))

geht man die kette durch so ergibt sich

JarOutputStream.close()
->ZipOutputStream.close()
-->DeflaterOutputStream.close()
--->FilterOutputStream.close()
---->FileOutputStream.close()

womit es völlig ausreicht einmal JarOutputStream.close() aufzurufen da dieser aufruf einmal bis zum "niedrigsten" OutputStream durchgereicht wird

und das ist wie gesagt bei ALLEN JavaSE-Streams der fall *sowohl In- als auch OutputStreams*

problematisch wird es erst wenn man mit Streams von drittanbietern arbeitet
in aller regel sollte es dann aber in der DOC vermerkt sein wenn das close() nicht weitergereicht wird
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Was genau macht die Methode close() im InputStream? Java Basics - Anfänger-Themen 5
S ResultSet close() in funktion nich möglich. Java Basics - Anfänger-Themen 8
B FileWriter close() muss? Java Basics - Anfänger-Themen 8
S Close Möglichkeiten Java Basics - Anfänger-Themen 3
T socket.close aber verbindung besteht noch Java Basics - Anfänger-Themen 4
J CLOSE in JOptionPane Java Basics - Anfänger-Themen 7
M Stream close Java Basics - Anfänger-Themen 6
D Mysql Connection Close? Java Basics - Anfänger-Themen 14
H File f close()? Java Basics - Anfänger-Themen 3
ModellbahnerTT Unterschied zwischen zwei Frame close Varianten Java Basics - Anfänger-Themen 3
G Warum bei Stream close() aufrufen. Java Basics - Anfänger-Themen 12
G [Verständnisfrage] flush() und close() Java Basics - Anfänger-Themen 6
N Problem mit BufferedReader und close() Java Basics - Anfänger-Themen 6
S window Close ? FrAge Java Basics - Anfänger-Themen 12
F Frame Close Frage Java Basics - Anfänger-Themen 17
D Log4J bei mehreren Modulen Java Basics - Anfänger-Themen 8
U Funktionale Interfaces mit mehreren abstrakten Methoden? Java Basics - Anfänger-Themen 8
C Problem mit mehreren Methoden + Scanner Java Basics - Anfänger-Themen 5
Poppigescorn String mit mehreren Wörtern füllen? Java Basics - Anfänger-Themen 4
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
P Objekt in mehreren Methoden verwenden. Java Basics - Anfänger-Themen 3
B Threads Problem mit mehreren Threads Java Basics - Anfänger-Themen 38
freudianslip if-Statement mit mehreren Zahlenwerten Java Basics - Anfänger-Themen 4
B Zeitgleiches Arbeiten am Code mit mehreren Personen? Java Basics - Anfänger-Themen 7
M Arrays mit mehreren Werten über JOptionPane initialisieren Java Basics - Anfänger-Themen 12
S Und-Abfrage mit mehreren Ungleich-Operatoren Java Basics - Anfänger-Themen 17
D Aufruf von mehreren Activities bringt die app zum Absturz Java Basics - Anfänger-Themen 5
G String mit mehreren Attributen aufteilen Java Basics - Anfänger-Themen 6
B Funktion mit mehreren Rückgabewerten aka Prozeduren? Java Basics - Anfänger-Themen 12
L Wie geht man bei mehreren Action Klassen vor? Java Basics - Anfänger-Themen 0
O compareTo nach mehreren Kriterien Java Basics - Anfänger-Themen 13
B Java Mail: suchen von mehreren Emailadressen Java Basics - Anfänger-Themen 5
R Antwort vom Server an mehreren Clients senden Java Basics - Anfänger-Themen 3
G Refactoring von mehreren identischen Klassen Java Basics - Anfänger-Themen 36
K Geburtsdaten von Mehreren Personen speichern und Alter ausgeben Java Basics - Anfänger-Themen 11
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
S boolean Wert von mehreren int Möglichkeiten abfragen ? Java Basics - Anfänger-Themen 4
E if-Bedingung mit mehreren Möglichkeiten ? Java Basics - Anfänger-Themen 6
B MVC Struktur mit mehreren Szenen - wer schaut mal bitte drüber? Java Basics - Anfänger-Themen 2
A String mit mehreren Zeilen splitten Java Basics - Anfänger-Themen 4
U Schleife mit mehreren Bedingungen ? Java Basics - Anfänger-Themen 29
C OOP Von mehreren Klassen aus auf das selbe Objekt zugreifen Java Basics - Anfänger-Themen 8
M Erste Schritte Speichern von mehreren Daten Java Basics - Anfänger-Themen 3
B Variable in mehreren Klassen nutzen Java Basics - Anfänger-Themen 4
D Eine MySQL Verbindung in mehreren Klassen Java Basics - Anfänger-Themen 8
F Interface Nach mehreren Kriterien sortieren Java Basics - Anfänger-Themen 2
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
F Http Post von mehreren Daten Java Basics - Anfänger-Themen 5
Dechasa Interface JFrame mit mehreren Übereinander liegenden JPanel Java Basics - Anfänger-Themen 5
R Eine Datei mit mehreren Zeilen beschreiben Java Basics - Anfänger-Themen 5
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
H Klassen Auf eine Hashtable aus mehreren Klassen zugreifen Java Basics - Anfänger-Themen 12
N Aufgabe: Pizza Konstruktor mit mehreren beliebigen Durchmesser/Preiskombinationen Java Basics - Anfänger-Themen 8
R Objekt erstellen - Attribute mit mehreren Werten Java Basics - Anfänger-Themen 1
F Selben Code in mehreren Projekten Java Basics - Anfänger-Themen 1
I Listen sortieren bei mehreren Listen zu einer Java Basics - Anfänger-Themen 2
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
G Klassen Problem mit mehreren Klassen Java Basics - Anfänger-Themen 2
kaoZ Input/Output Android : Deserialisieren von mehreren Objekten in einer Datei Java Basics - Anfänger-Themen 0
J Menü mit mehreren Bildern Java Basics - Anfänger-Themen 5
kaoZ Input/Output Einlesen von mehreren Zeilen Java Basics - Anfänger-Themen 4
T Variablen Zufallsgenerator mit mehreren Variablen Java Basics - Anfänger-Themen 3
Devil0s Entwicklung mit mehreren Leuten Java Basics - Anfänger-Themen 7
3 JLabel - Text in mehreren Zeilen zentrieren Java Basics - Anfänger-Themen 5
R Compiler-Fehler Auf selben Array in mehreren "cases" vom "Switch" zugreifen Java Basics - Anfänger-Themen 11
K Vererbung Methoden in klassen auslagern und in mehreren Klassen verfügbar machen Java Basics - Anfänger-Themen 8
D Eine Variable in mehreren "switch" Java Basics - Anfänger-Themen 24
P Liste in einer Klasse füllen und mehreren anderen Klassen lesend verwenden Java Basics - Anfänger-Themen 5
propra Objekte in mehreren Listen Java Basics - Anfänger-Themen 6
T GUI Prog. mit mehreren Klassen Java Basics - Anfänger-Themen 4
K Erste Schritte Eingabetext besteht aus mehreren Zeilen? Java Basics - Anfänger-Themen 3
D javac zum Kompilieren von mehreren Dateien Java Basics - Anfänger-Themen 6
P Auslesen von mehreren XML Dateien - Fehler Java Basics - Anfänger-Themen 11
M Java Berechnung mit mehreren Lösungen? Java Basics - Anfänger-Themen 9
T List mit mehreren gleichen Strings bereinigen Java Basics - Anfänger-Themen 4
L Server mit mehreren Clients Java Basics - Anfänger-Themen 25
C Methoden Methoden mit mehreren Rückgabewerten Java Basics - Anfänger-Themen 11
D OOP Objekt in mehreren Objekten Java Basics - Anfänger-Themen 3
T Hashmap mit mehreren Werten Java Basics - Anfänger-Themen 9
M Backslash aus mehreren einen machen? Java Basics - Anfänger-Themen 7
M Frame mit mehreren areas Java Basics - Anfänger-Themen 14
P Wie mehreren Threads Aufgaben zuweisen und abarbeiten lassen? Java Basics - Anfänger-Themen 15
Dit_ Aktualisieren von mehreren Views Java Basics - Anfänger-Themen 2
S Datentypen In mehreren Dateien Strings ersetzen Java Basics - Anfänger-Themen 14
B Swing Applikation mit mehreren Klassen Java Basics - Anfänger-Themen 2
J Matheaufgabe aus String mit mehreren Operatoren Java Basics - Anfänger-Themen 16
Q If-Abfrage mit mehreren Bedingungen Java Basics - Anfänger-Themen 6
D Datentypen Aufzählunsdatentyp in mehreren Klassen verwenden? Java Basics - Anfänger-Themen 10
U Umsetzungsfrage: Personen mit mehreren "Rollen" Java Basics - Anfänger-Themen 9
D Datentypen Liste mit Objekten aus mehreren Klassen Java Basics - Anfänger-Themen 3
P Doppelte Einträge in mehreren Textfiles finden und ausgeben Java Basics - Anfänger-Themen 8
M String mit mehreren Zahlen in Integer-Array Java Basics - Anfänger-Themen 2
S Infos aus mehreren JVMS verbinden Java Basics - Anfänger-Themen 3
ModellbahnerTT Klassen in mehreren Projekten benutzten Java Basics - Anfänger-Themen 3
J Performance Vergleich von if-Abfragen mit mehreren Bedingungen Java Basics - Anfänger-Themen 9
B Identifikation eines einzelnen Buttons aus mehreren Buttons per Schleife erzeugten Java Basics - Anfänger-Themen 4
M property mit mehreren werten Java Basics - Anfänger-Themen 3
H Vergleichen mit mehreren Textdateien Java Basics - Anfänger-Themen 2
X Konfiguration einer Anwendung aus mehreren Dateien Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben