Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Jan Nabers Geändert vor über 11 Jahren
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)
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.