Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.

Ähnliche Präsentationen


Präsentation zum Thema: "10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java."—  Präsentation transkript:

1 10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java

2 10 Streams JavaHS Merseburg WS 05/06 Java bietet eine umfangreiche Bibliothek zum sequentiellen Zugriff auf Dateien, für wahlfreie Dateioperationen und zur Verwaltung von Verzeichnissen. Alle Klassen zur (Datei-)Ein- und Ausgabe befinden sich im Paket java.io import java.io.*; Sequentieller Zugriff auf Dateien erfolgt über das Konzept der Streams. Streams:... abstraktes Konstrukt, dessen Fähigkeit darin besteht, Zeichen auf ein imaginäres Ausgabegerät zu schreiben oder von diesem zu lesen. Erst konkrete Unterklassen binden die Zugriffsroutinen an echte Ein- und Ausgabegeräte (Dateien, Strings oder Netzwerk- Kommunikationskanäle).

3 10 Streams JavaHS Merseburg WS 05/06 Eingabestream Ausgabestream

4 10 Streams JavaHS Merseburg WS 05/06 Streams können verkettet und verschachtelt werden. Verkettung: Dateien werden zusammengefasst und für den Aufrufer als ein einziger Stream dargestellt. Verschachtelung:... erlaubt die Konstruktion von Filtern, die bei der E/A bestimmte Zusatzfunktionen (Puffern von Zeichen, Zählen von Zeilen, Interpretation binärer Daten) übernehmen Beide Konzepte sind mit normalen Sprachmitteln realisiert und können selbst erweitert werden (eigene Filter zur Analyse des Eingabestroms).

5 10 Streams JavaHS Merseburg WS 05/06 LesenSchreiben Öffnen des Stream while (mehr Daten) read (Daten) Schließen des Stream Öffnen des Streams while (mehr Daten) write (Daten) Schließen des Stream

6 10 Streams JavaHS Merseburg WS 05/06 Character Streams ReaderReader und Writer sind die abstrakten Superklassen für Character Streams.Writer Reader bieten ein API und eine teilweise Implementation für das Lesen von 16-bit character Werten. Writer bieten entsprechend ein API für das Schreiben von 16-bit character Werten. Die Unterklassen von Reader und Writer implementieren spezialisierte Streams und können in zwei Kategorien unterteilt werden: Klassen die von/in Datenquellen lesen/schreiben (grau) Klassen die (Stream-) Daten verarbeiten (weiss).

7 10 Streams JavaHS Merseburg WS 05/06

8 10 Streams JavaHS Merseburg WS 05/06

9 10 Streams JavaHS Merseburg WS 05/06 Byte Streams InputStream und OutputStream sind die abstrakten Superklassen für Byte Streams. InputStream und OutputStream bieten ein API und eine partielle Implementation für Streams die 8-bit Werte (Bytes) lesen und schreiben. Diese Streams werden insbesondere für das Lesen und Schreiben von Binärdateien verwendet. Zwei dieser Bytestreamklassen, ObjectInputStream und ObjectOutputStream, werden für die Objekt-Serialisierung verwendet. Wie bei den Reader und Writer Klassen, bieten auch die Unterklassen von InputStream und OutputStream spezielle I/O Klassen an:

10 10 Streams JavaHS Merseburg WS 05/06

11 10 Streams JavaHS Merseburg WS 05/06 public abstract class java.io.InputStream { public InputStream();// Konstruktor public int available(); // liefert Anzahl der Zeichen, die noch gelesen werden kann public void close(); // schließt den Eingabestrom public void mark(int readlimit); // markiert eine Position im Eingabestrom (vorher prüfen, // sonst Ausnahme) public boolean marksupported(); // Prüfen, ob Markieren unterstützt wird public abstract int read(); // liest das nächste Byte aus dem Eingabestrom und liefert // es als int (-1 = Ende des Eingabestroms) public int read(byte b[]); public int read(byte b[], int off, int len);// überträgt eine Reihe von Zeichen in das als P // übergebene Array und liefert Anzahl der gelesenen Zeichen als Rückgabewert public void reset();// Setzt Lesezeiger an markierte Stelle zurück public void skip(long n); // überspringt n Zeichen im Eingabestrom

12 10 Streams JavaHS Merseburg WS 05/06 Wahl des Eingabegerätes... bestimmt die Art des Datenlieferanten abgeleitete Klassen: FileInputStreamEingabe aus Datei StringBufferInputStreamEingabe aus einem String SequenceInputStreamVerkettung von Eingabe Streams PipedInputStreamEingabe aus Netzwerk-Pipe FilterInputStreamFilterung von Eingabe Streams

13 10 Streams JavaHS Merseburg WS 05/06 FileInputStream... lesen aus einer Datei Konstruktoren public FileInputStream(String name) throws FileNotFoundException; // öffnet Datei name zum Lesen public FileInputStream(FileDescriptor fdObj) throws FileNotFoundException; // spezifiziert eine bereits geöffnete Datei public FileInputStream(File file) throws FileNotFoundException;

14 10 Streams JavaHS Merseburg WS 05/06 public abstract class java.io.OutputStream { public OutputStream(); // Konstruktor public void close(); public void flush(); public abstract void write(int b); public void write(byte b[]); public void write(byte b[], int off, int len);}

15 10 Streams JavaHS Merseburg WS 05/06 Die Wahl des Ausgabegerätes Als abstrakte Klasse kann OutputStream/InputStream nicht instanziert werden, daher wurden verschiedene konkrete Klassen abgeleitet, deren Aufgabe es ist, die Verbindung zu einem konkreten Ausgabegerät herzustellen: FileOutputStream Ausgabe in eine Datei ByteArrayOutputStream Ausgabe in ein dynamisches Array von Byte PipedOutputStream Ausgabe in eine Netzwerk-Pipe FilterOutputStream Filterung von Ausgabe-Streams FileOutputStream... ermöglicht schreibenden Zugriff auf sequentielle Dateien und implementiert die abstrakten Eigenschaften von OutputStream.

16 10 Streams JavaHS Merseburg WS 05/06 zusätzliche Konstruktoren: public FileOutputStream(String name) throws IOException; // Öffnen (Inhalt löschen) bzw. Anlegen einer Datei durch Übergabe des Dateinamens public FileOutputStream(FileDescriptor fdObj) throws IOException; // Öffnen (Inhalt löschen) bzw. Anlegen einer Datei durch Übergabe des Dateidescriptors public FileOutputStream(File file) throws IOException; // File-Objekt: Repräsentation einer Datei im Kontext ihres Verzeichnisses Alle Methoden der Klasse deklarieren als Ausnahme IOException als allgemeine Fehleranzeige Konstruktor:Datei kann nicht angelegt werden write:Schreibfehler close:nicht näher spezifizierter I/O-Fehler Differenziertere Fehlerbehandlung ist möglich.

17 10 Streams JavaHS Merseburg WS 05/06 Reader und InputStream definieren ähnliche APIs für unterschiedliche Datentypen. Beispiel: Reader- Methoden zum lesen von Zeichen und Z.-Arrays int read() int read(char cbuf[]) int read(char cbuf[], int offset, int length) InputStream Methoden zum Lesen von Bytes int read() int read(byte cbuf[]) int read(byte cbuf[], int offset, int length) Writer und OutputStream verhalten sich ähnlich int write(char c),int write(char cbuf[]) int write(char cbuf[],int offset, int length) int write(int c)int write(byte cbuf[]) int write(byte cbuf[], int offset, int length)


Herunterladen ppt "10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java."

Ähnliche Präsentationen


Google-Anzeigen