Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 1 2 Dr. Christian Herzog Technische.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
der Universität Oldenburg
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Imperative Programmierung -Entwicklungswerkzeuge
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Ausnahmen HS Merseburg (FH) WS 06/07.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Indirekte Adressierung
FH-Hof Sockets in Java Richard Göbel. FH-Hof Kommunikation über das Internet - Grundlagen Ein Rechner wird im Internet über die so genannte IP- Adresse.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
SWITCH - Anweisung.
IF-ELSE-IF-Ketten Weiter mit PP..
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
DO...WHILE Anweisung.
ARRAY oder FELD oder VEKTOR
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Programmieren mit JAVA
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Zusammenfassung Vorwoche
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG Einführung in Java1 Einführung in JAVA.
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
Datenströme DVG Datenströme.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
FH-Hof 1 XML-Parser Richard Göbel. FH-Hof 2 XML-Parser- DOM Object Tree Parser Objekt der Klasse 'DocumentBuilderFactory' mit 'newInstance()' erzeugen.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Grundlagen der Programmierung
Copyright 2011 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2011/12 Kapitel 11, Folie 1 2 Dr. Christian Herzog Technische.
Grundlagen der Programmierung
Grundlagen der Informatik 1 Thema 20: Ströme und Ein-/Ausgabe in Java
Java für Fortgeschrittene
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Copyright 2004 Bernd Brügge Einführung in die Informatik II TUM Sommersemester Prof. Bernd Brügge, Ph.D Institut für Informatik Technische Universität.
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
Optimale Ursprungsgerade
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Autor: Timo Pagel Nutzung: Diese Lernkarten sind für die Nutzung mit OpenCards gedacht Siehe dazu
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Java-AG Datenstreams: Dateibehandlung, Lesen aus und schreiben in eine Datei.
Java-Kurs Übung Besprechung der Hausaufgabe
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 12. Vorlesung WS 2001/2002.
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Ein- und Ausgabe in Java Packet: java.io
OOP mit Java Oder: Java in 5 Tagen. 1. Tag Klassen und Methoden Hello World in Variationen Von Menschen und Geschlechtern Horden (Schlange stehen)
Ein-/ Ausgabe in Java ein Überblick. © eigentlich ganz einfach ? Ein-/Ausgabe durch package java.io Ausgabe (auf Konsole) mit System.out.println()
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Ein- und Ausgabe in der Programmiersprache Java.
Java I/O Input / Output stream Library
Java I/O Input / Output stream Library
Konstruktoren.
Implementieren von Klassen
 Präsentation transkript:

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 1 2 Dr. Christian Herzog Technische Universität München Wintersemester 2007/2008 Grundlagen der Programmierung Kapitel 10: Ein- und Ausgabe

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 2 Ziele dieses Kapitels Sie verstehen das Konzept der Ströme –Sie können Klassen wie Reader, Writer, InputStream und OutputStream benutzen. Sie können in Java Dateien lesen und schreiben

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 3 Das Problem In den Informatik-Systemen, die wir bisher implementiert haben, haben wir Klassen deklariert, instantiiert und die Attribute mit Werten gefüllt. Die Werte waren allerdings nur während der Laufzeit des Systems verfügbar. Häufig sollen Werte extern gespeichert werden, so dass sie bei einem erneuten Lauf wieder zur Verfügung stehen. In vielen Fällen werden auch Werte von einem Informatik-System erzeugt, die dann von einem anderen System benötigt werden. Bei interaktiven Systemen wollen wir bereits während der Ausführung Daten mit der Umgebung (Benutzer) austauschen: –Wir wollen Werte über eine Tastatur eingeben lassen, andere Werte sollen auf dem Bildschirm erscheinen. Zur Speicherung von Werten und zur Interaktion mit Benutzern führen wir jetzt die Konzepte Strom und Datei ein.

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 4 Datei Wir haben bereits die Kommunikation mit der Umgebung des Systems zugelassen, allerdings sehr spärlich. –System.out.println() : Ausdrucken von Daten auf dem Bildschirm Unser Ziel ist jetzt die Modellierung der Interaktion von Informatik- Systemen mit ihrer Umgebung. Definition Datei: Eine Verwaltungseinheit zur Repräsentation von externen Daten nach gewissen Organisationsformen, die den Zugriff innerhalb des Informatik-Systems auf die Daten festlegen.

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 5 Speicherung von Dateien Eine Datei ist mit einem Ein-Ausgabegerät, kurz E/A-Gerät, (engl. I/O device) verbunden, das die Daten einer Datei permanent speichern kann. –Beispiele von E/A-Geräten: Platte, CD, DVD, Magnetband, Stick Abhängig vom Typ der Daten in der Datei unterscheiden wir ebenfalls verschiedene Arten von Dateien: Text-Datei, Binär-Datei, Personal- Datei, Studenten-Datei,...

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 6 Strom Um auf Dateien innerhalb eines Informatik-Systems zugreifen zu können, führen wir den Begriff des Stroms(*) ein. (*) Achtung: In Goos II hat der Begriff Strom eine andere Bedeutung. Bei Goos ist ein Strom ein Iterator über Daten. Definition Strom: Die interne Repräsentation einer (externen) Datei oder eines E/A-Gerätes in einem Informatik-System. Definition Eingabe: Das Lesen der Daten von einer Datei oder einem Eingabegerät in einen Strom. Der Strom heißt dann Eingabestrom. Definition Ausgabe: Das Schreiben von Daten eines Stroms auf eine Datei oder ein Ausgabegerät. Der Strom heißt dann Ausgabestrom.

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 7 Beispiele von Eingabe- und Ausgabeströmen Eine Tastatur ist eine Quelle für einen Eingabestrom von Zeichen an ein Programm. Ein Bildschirm ist ein Empfänger für einen Ausgabestrom von Zeichen von einem Programm. Tastatur Programm Eingabestrom Bild Schirm Programm Ausgabestrom Eine Datei ist Empfänger oder Quelle für Ströme von Zeichen Eingabestrom Ausgabestrom Programm Dateien

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 8 Modellierung von Strömen Wir modellieren Ströme als Klassen. Allgemein: Ein Strom hat mehrere Attribute: –Datei : Name der mit dem Strom assoziierten Datei –Marke : Zeiger auf das derzeitige Element (current element). Ein Strom stellt gewöhnlich folgende Dienste bereit: –Open() : Öffnen der Verbindung mit einer Datei / einem Gerät –Read() : Lesen eines Elementes –Write() : Schreiben eines Elementes –Close() : Schließen der Verbindung mit der Datei / dem Gerät. Die genaue Funktionalität der Dienste und die Implementierung von Strömen ist abhängig von der Programmiersprache, die Implementierung von Dateien ist außerdem oft noch abhängig vom Betriebssystem. Java unterstützt Ströme und Dateien. –Die Methoden lösen i.a. Ausnahmen der Klasse IOException bzw. von deren Unterklassen aus.

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 9 Ströme und Dateien in Java Java stellt eine große Anzahl von unterschiedlichen Strömen für Ein- Ausgabe ( Reader, Writer, InputStream, OutputStream ) und eine betriebssystem-unabhängige Beschreibung für Dateien ( File ) bereit, die alle im Paket java.io definiert sind. Object Writer InputStream OutputStream File Reader KlasseBeschreibung Reader Abstrakte Klasse für textuelle Eingabeströme Writer Abstrakte Klasse für textuelle Ausgabeströme InputStream Abstrakte Klasse für binäre Eingabeströme OutputStream Abstrakte Klasse für binären Ausgabeströme File Plattform-unabhängige Beschreibung von Dateien

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 10 InputStream: Modelliert binäre Eingabeströme KlasseBeschreibung ByteArrayInputSteamErlaubt das Lesen von Reihungen, als ob sie Ströme wären FileInputStreamErmöglicht das Lesen von Bytes aus Binär-Dateien FilterInputStreamErmöglicht das Filtern von Daten auf verschiedene Arten Buffered InputStreamErmöglicht das Puffern von Eingabedaten DataInputStream Lesen von vordefinierten elementaren Java-Typen ObjectInputStreamZum Deserialisieren von Objekten PipedInputStreamLesen von Daten aus einem anderen Thread InputStream FileInput Stream FilterInput Stream ObjectInput Stream PipedInput Stream ByteArray InputStream Buffered Input Stream DataInput Stream

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 11 KlasseBeschreibung BufferedReaderGepufferte Eingabe bei textuellen Eingabeströmen CharArrayReaderEingabe-Operationen auf Reihungen vom Typ Char FileReaderZeicheneingabe bei Dateien PipedReaderMethoden zum Filtern von Zeicheneingaben StringReaderEingabe-Operationen für Zeichenketten (String) LineNumberReader Zählt Anzahl der Text-Zeilen, die gelesen wurden. Reader: Modelliert textuelle Eingabeströme Reader LineNumber Reader FileReader CharArray Reader InputStream Reader PipedReader StringReader Buffered Reader

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 12 OutputStream: Modelliert binäre Ausgabeströme KlasseBeschreibung ByteArrayOutputSteamErlaubt das Schreiben von Reihungen als ob sie Ströme wären FileOutputStreamErmöglicht das Schreiben von Bytes in Binär-Dateien FilterOutputStreamErmöglicht das Filtern von Daten auf verschiedene Arten Buffered OutputStreamErmöglicht das Puffern von Ausgabedaten DataOutputStream Schreiben von vordefinierten elementaren Java-Typen ObjectOutputStreamZum Serialisieren von Objekten PipedOutputStreamSchreiben von Daten auf anderen Thread OutputStream FileOutput Stream FilterOutput Stream ObjectOutput Stream PipedOutput Stream ByteArray OutputStream BufferedOutput Stream DataOutput Stream

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 13 Writer: Modelliert textuelle Ausgabeströme KlasseBeschreibung BufferedWriterGepufferte Ausgabe bei textuellen Ausgabeströmen CharArrayWriterAusgabe-Operationen auf Reihungen (Array of Char) FileWriterFür Ausgabe auf Text-Dateien PipedWriterMethoden zum Filtern bei Ausgabe von Zeichen (Char) PrintWriterTextuelle Ausgabe von Java's Basistypen StringWriterAusgabe von Zeichenketten (String) Writer FileWriter CharArray Writer OutputStream Reader Piped Writer Print Writer Buffered Writer String Writer

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 14 System.in System.out Bild Schirm Tastatur Programm Speicher Die Klasse System.out ist ein Strom vom Typ PrintStream System.in ist ein Strom vom Typ InputStream: Eingabe wird Byte für Byte gelesen Die Standard Ein/Ausgabe in Java basiert auf Strömen Informelles Modell mit Strömen

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 15 Wichtiges Konzept: Puffern von Daten Definition Eingabepuffer (input buffer): Ein Bereich im Speicher für die temporäre Speicherung von bereits gelesenen aber noch nicht verarbeiteten Daten: –Anstatt ein Byte nach dem anderen von dem Eingabegerät zu lesen, werden zunächst eine große Anzahl von Bytes gleichzeitig in den Puffer gelesen, –Diese werden dann stückweise bei jeder Lese-Operation ins Programm transferiert. Definition Ausgabepuffer (output buffer): Eikn Bereich im Speicher für die temporäre Speicherung von zu schreibenden Daten. –Daten werden erst auf das Ausgabegerät geschrieben, wenn der Puffer voll ist (oder bei einer sogenannten flush() -Operation). Puffer helfen, den Geschwindigkeitsunterschied zwischen langsamen Zugriffen auf Geräte/Dateien und schnellen Prozessoren auszugleichen.

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 16 Wichtiges Konzept: Konkatenation von Strömen FileReader fReader = new FileReader(fileName); BufferedReader bReader = new BufferedReader(fReader); konkatenieren zwei Ströme vom Typ BufferedReader und FileReader. Das Programm kann dann bReader.readLine() benutzen, um Zeile für Zeile - und nicht Zeichen für Zeichen - von der Text-Datei mit Namen fileName zu lesen. Interpretation: Die Daten fließen von der Text-Datei erst durch FileReader, dann durch BufferedReader zum Speicher. Die Deklarationen FileReader BufferedReader Text Datei Speicher

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 17 Konkatenation von Ausgabeströmen FileOutputStream fOStream = new FileOutputStream (fileName); PrintWriter pWriter = new PrintWriter (fOStream); konkatenieren zwei Ströme FileOutputStream und PrintWriter. Das Programm kann dann die bequemen Methoden pWriter.print() und pWriter.println() benutzen. Interpretation: Die Daten fließen vom Speicher erst durch PrintWriter, dann durch FileOutputStream zur Text-Datei. Bequem: Die Methoden von PrintWriter behandeln alle Ausnahmen, die bei FileOutputStream auftreten können, und deklarieren selbst keine. Die Deklarationen FileOutputStream PrintWriter Text Datei Speicher

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 18 public void print(int i);public void println(int i); public void print(long l);public void println(long l); public void print(float f);public void println(float f); public void print(double d);public void println(double d); public void print(String s);public void println(String s); public void print(Object o);public void println(Object o); Wann benutzen wir welchen Strom? Bei binärer Ein-Ausgabe: –Unterklassen von InputStream und OutputStream. Bei Textueller Ein-Ausgabe: –Unterklassen von Reader und Writer. Beispiel: PrintWriter ist eine Unterklasse von Writer. Sie stellt Methoden zur textuellen Ausgabe von Objekten vom Typ int, long, float, double, String und Object bereit:

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 19 Verbindung von Dateien bzw. Geräten und Strömen Jede Programmiersprache muss ein Konzept bereitstellen, um Ströme mit Dateien zu verbinden. –In Java geschieht die Verbindung im Konstruktor der Strom-Klasse, die mit dem Dateinamen als Argument aufgerufen wird. Beispiel: String fileName = "/home/bob/src/trivial.java"; FileWriter fWriter = new FileWriter(fileName); verbindet den Ausgabestrom fWriter mit einer Datei namens /home/bob/src/trivial.java.

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 20 Standard-Ein-/Ausgabe in Java Die Klasse System stellt in Java über Klassenvariablen Ströme bereit, die mit der Tastatur ( System.in ) und dem Bildschirm ( System.out bzw. System.err ) verbunden sind:

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 21 Ein Beispiel: Kopieren vom Dateien Wie wollen in einer Klasse FileUtils eine Methode copyFile() zur Verfügung stellen, die zwei Dateinamen als Parameter erhält und die eine Datei in die andere kopiert. import java.io.*; class FileUtils { public static void copyFile (String inputFile, String outputFile) { // Es wird versucht, die Eingabedatei zum Lesen zu oeffnen: FileReader fReader = null; try { fReader = new FileReader (inputFile); } catch (FileNotFoundException e) { System.out.println("Fehler: Die Datei " + inputFile + " konnte nicht zum Lesen geoeffnet werden."); System.exit(97); } // Konkatenation von Eingabestroemen: BufferedReader bReader = new BufferedReader(fReader); Importieren der Klassen- Bezeichner aus dem Paket java.io (Siehe Kapitel 11)

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 22 Kopieren vom Dateien (contd) // Versuch, die Ausgabedatei zum Schreiben zu oeffnen: FileOutputStream fOStream = null; try { fOStream = new FileOutputStream (outputFile); } catch (IOException e) { System.out.println("Fehler: Die Datei " + outputFile + " konnte nicht zum Schreiben geoeffnet werden."); System.exit(98); } // Konkatenation von Ausgabestroemen: PrintWriter pWriter = new PrintWriter (fOStream);

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 23 Kopieren vom Dateien (contd) // Der Inhalt der Eingabedatei wird zeilenweise in die // Ausgabedatei kopiert: try { String inputLine; do { // Eine Zeile lesen: inputLine = bReader.readLine(); // Beim Dateiende wird der null-Pointer geliefert: if (inputLine != null) // Die Zeile schreiben: pWriter.println(inputLine); } while (inputLine != null); // Solange kein Dateiende // Schliessen der Stroeme: bReader.close(); pWriter.close(); } catch (IOException e) { System.out.println("Fehler: " + e); System.exit(99); } } // copyFile() } // class FileUtils

Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 24 Zusammenfassung Eine Datei ist eine Sammlung von Daten, die extern auf einem Sekundärspeicher (Platte, CD, Band) gespeichert sind. Ein Strom ist ein Objekt, das Daten von anderen Objekten holt oder zu anderen Objekten liefert. –Ein Eingabestrom liefert Daten von einer externen Quelle zu einem Programm. –Ein Ausgabestrom liefert Daten vom Programm zu einem externen Gerät oder einer Datei. Puffer ist ein temporärer Bereich im Hauptspeicher, um Daten während der Ein- oder Ausgabe zu speichern. Java stellt eine Vielzahl von Klassen zur Implementierung von Strömen bereit. Durch Konkatenation von Strömen erhält man einen Gesamtstrom mit jeweils optimaler Schnittstelle zum Programm auf der einen Seite und zur Datei bzw. zum Gerät auf der anderen Seite.