" bzw. " >> " Umleitung des Ausgabedatenstroms z.B.: programm > ausgabe.dat leitet die Ausgabe des Programms in eine Datei um " > " erzeugt neue Datei, " >> " hängt an vorhandene Datei an " < " Umleitung des Eingabedatenstroms z.B.: programm < eingabe.dat programm liest die Eingaben von einer Datei statt von der Tastatur " | " Verbindet die Ausgabe eines Programms mit der Eingabe eines anderen Programms z.B.: programm1 | programm2 der von programm1 erzeugte Ausgabestrom wird von programm2 als Eingabestrom benutzt Kombinationen sind möglich: z.B.: p1 o.dat">

Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

DVG2 - 08 - Datenströme Datenströme. DVG2 - 08 - Datenströme 2 Filter und Pipes In UNIX eingeführte Abstraktion beim Datenaustausch Programme arbeiten.

Ähnliche Präsentationen


Präsentation zum Thema: "DVG2 - 08 - Datenströme Datenströme. DVG2 - 08 - Datenströme 2 Filter und Pipes In UNIX eingeführte Abstraktion beim Datenaustausch Programme arbeiten."—  Präsentation transkript:

1 DVG Datenströme Datenströme

2 DVG Datenströme 2 Filter und Pipes In UNIX eingeführte Abstraktion beim Datenaustausch Programme arbeiten als Erzeuger und/oder als Verbraucher von Datenströmen ==> Filter Die Erzeuger- und Verbraucherschnittstelle ist standardisiert. Ausgabestrom eines Programms kann als Eingabestrom eines anderen Programms verwendet werden. ==> Pipe Standard: Eingabestrom = Tastatur Ausgabestrom = Bildschirm

3 DVG Datenströme 3 Umleitung von Datenströmen Umleitung von Datenströmen wird vom System unterstützt: " > " bzw. " >> " Umleitung des Ausgabedatenstroms z.B.: programm > ausgabe.dat leitet die Ausgabe des Programms in eine Datei um " > " erzeugt neue Datei, " >> " hängt an vorhandene Datei an " < " Umleitung des Eingabedatenstroms z.B.: programm < eingabe.dat programm liest die Eingaben von einer Datei statt von der Tastatur " | " Verbindet die Ausgabe eines Programms mit der Eingabe eines anderen Programms z.B.: programm1 | programm2 der von programm1 erzeugte Ausgabestrom wird von programm2 als Eingabestrom benutzt Kombinationen sind möglich: z.B.: p1 o.dat

4 DVG Datenströme 4 Filter Programm Filter EingabestromAusgabestrom System.inSystem.out

5 DVG Datenströme 5 Pipes Programm Filter EingabestromAusgabestrom Programm Filter EingabestromAusgabestrom Pipe

6 DVG Datenströme 6 Schichtenmodell Zwischen dem Programm und den konkreten Datenströmen existiert eine standardisierte Schnittstelle. Dadurch kann der größte Teil eines Programms unabhängig von dem konkreten Medium entwickelt werden auf dem die Daten strömen. Ein- und Ausgabeströme beschreiben nur den einfachsten Transport von Bytes, d.h. es sind weder Datentypen noch Strukturen bekannt. Der Transport komplexer Daten wird durch aufgesetzte Schichten beschrieben.

7 DVG Datenströme 7 DatenerzeugerDatenverbraucher Schichtenmodell Bytetransport Datenstromgepufferter Transport Bytetransport gepufferter TransportDatenstrom RAMPipe RAM FileNetz Internet File Internet Netz

8 DVG Datenströme 8 Realisierungen in JAVA Eingabestrom: System.in Ausgabestrom: System.out Klasse für Eingabeströme: InputStream Klasse für Ausgabeströme: OutputStream Problem: Darstellung der Zeichen in JAVA als Unicode und im Betriebssystem als ASCII Konvertierung erforderlich Klasse für Eingabeströme als Zeichen: Reader Klasse für Ausgabeströme als Zeichen: Writer Die Klassen InputStream, OutputStream, Reader und Writer sind abstrakte Klassen. Es fehlt die Realisierung der Methoden read bzw. write. Diese Klassen realisieren die standardisierte Schnittstelle zwischen Programm und konkreten Datenströmen.

9 DVG Datenströme 9 Die Klassen InputStream und Reader Die Klassen InputStream und Reader stellen Basismethoden zum Lesen von Eingabeströmen zur Verfügung oder definieren sie als abstrakte Methoden. Sie dienen als Basis zur Definition verschiedenster Zugriffsverfahren. InputStream liest Bytes. Reader liest ASCI-Zeichen und wandelt sie in Unicode-Zeichen um. Beide Klassen definieren ähnliche Methoden wobei InputStream mit byte -Größen arbeitet und Reader mit char -Größen.

10 DVG Datenströme 10 Methoden von InputStream und Reader int available() gibt die Anzahl der Bytes bzw. Zeichen aus, die noch gelesen werden können abstract void close() schließt den Eingabedatenstrom void mark(int readlimit) markiert die gerade gelesene Position für reset(), nach lesen von readlimit Bytes bzw. Zeichen wird die gemerkte Position ungültig boolean markSupported() testet ob die mark-reset -Funktion unterstützt wird abstract int read() liest ein Byte bzw. Zeichen ein und gibt dieses als int aus, wenn das Ende des Datenstroms erreicht wird, wird -1 ausgegeben int read (byte[] b) int read (char[] b) es werden maximal b.length Bytes bzw. Zeichen in das Feld b gelesen

11 DVG Datenströme 11 int read (byte[] b, int off, int len) abstract int read (char[] b, int off, int len) es werden maximal len Bytes bzw. Zeichen in das Feld b ab Position off gelesen void reset() setzt den Eingabestrom auf die mit mark() gemerkte Position zurück long skip(long n) überspringt im Eingabestrom n Bytes bzw. Zeichen und gibt die Anzahl der übersprungenen Zeichen zurück

12 DVG Datenströme 12 Die Klassen OutputStream und Writer Die Klassen OututStream und Writer stellen Basismethoden zum Schreiben von Ausgabeströmen zur Verfügung oder definieren sie als abstrakte Methoden. Sie dienen als Basis zur Definition verschiedenster Zugriffsverfahren. OutputStream schreibt Bytes. Writer wandelt Unicode-Zeichen um und schreibt sie als ASCI- Zeichen. Beide Klassen definieren ähnliche Methoden wobei OutputStream mit byte-Größen arbeitet und Writer mit char-Größen.

13 DVG Datenströme 13 Methoden von OutputStream und Writer abstract void close() schließt den Ausgabedatenstrom abstract void flush() bei gepufferter Ausgabe werden die Daten im Puffer geschrieben und der Puffer geleert abstract void write(int b) schreibt ein Byte bzw. Zeichen void write (byte[] b) void write (char[] b) es werden b.length Bytes bzw. Zeichen geschrieben void write(byte[] b, int off, int len) abstract void write(char[] b, int off, int len) es werden len Bytes bzw. Zeichen in des Feldes b ab Position off geschrieben

14 DVG Datenströme 14 Methoden der Klasse Writer void write (String str) es werden str.length() Zeichen geschrieben void write(String str, int off, int len) es werden len Zeichen in der Zeichenkette str ab Position off geschrieben

15 DVG Datenströme 15 InputStream, Reader, OutputStream und Writer sind die allgemeinen Basisklassen aller Klassen für die Ein- und Ausgabe von Daten. Alle I/O-Klassen des Packeges java.io werden von diesen Klassen abgeleitet. Objekte dieser Klassen können verwendet werden, wenn ein Programm möglichst unabhängig von der Quelle bzw. dem Ziel der Daten sein sollen. Z.B.: InputStream in; if ( Quelle == File) in = new FileInputStream("datei"); if ( Quelle == RAM ) in = new ByteArrayInputStream(buffer); if ( Quelle == thread ) in = new PipedInputStream();.... int z = in.read();

16 DVG Datenströme 16 OutputStream/WriterInputStream/Reader Bytetransport Datenstromgepufferter Transport Bytetransport gepufferter TransportDatenstrom RAMPipe RAM FileNetz Internet File Internet Netz

17 DVG Datenströme 17 Verknüpfung von Datenströmen Datenströme können mit verschiedenen Quellen und Senken verbunden werden: –Hauptspeicherbereiche –Dateien –Internetdateien –Pipes Datenströme können verschieden interpretiert werden –Bytes –Zeichen –primitive Datentypen –Objekte –Tokens

18 DVG Datenströme 18 Datenströme können verschieden organisiert sein –gepuffert –ungepuffert Es kann unterschiedliche Zugriffsarten für Datenströme geben –sequentiell –direkt Alle diese Eigenschaften können kombiniert werden.

19 DVG Datenströme 19 FileInputStream und FileReader Dienen dem Lesen von Dateien. Realisieren alle Methoden der Klasse InputStream bzw. Reader. Konstruktoren von FileInputStream –FileInputStream(File file) –FileInputStream(FileDescriptor fdObj) FileDescriptor realisiert eine eindeutige Kennung für einen Datenstrom. –FileInputStream(String name) name ist der Name der zu lesenden Datei Konstruktoren von FileReader –FileReader(File file) –FileReader(FileDescriptor fdObj) –FileReader(String name) name ist der Name der zu lesenden Datei

20 DVG Datenströme 20 Beispiel: Lesen einer Datei File inFile = new File(args[0]); Reader inReader = new FileReader(inFile); int z; while ( (z=inReader.read()) >=0 ) System.out.print((char)z); inReader.close();

21 DVG Datenströme 21 FileOutputStream und FileWriter Dienen dem Schreiben von Dateien. Realisieren alle Methoden der Klasse OutputStream bzw. Writer. Konstruktoren von FileOutputStream –FileOutputStream(File file) –FileOutputStream(FileDescriptor fdObj) –FileOutputStream(String name) name ist der Name der zu schreibenden Datei –FileOutputStream(String name, boolean append) append == true : Daten werden an die Datei angehängt Konstruktoren von FileWriter –FileWriter(File file) –FileWriter(FileDescriptor fdObj) –FileWriter(String name) name ist der Name der zu schreibenden Datei –FileWriter(String name, boolean append)

22 DVG Datenströme 22 Beispiel: Kopieren einer Datei File inFile = new File(args[0]); File outFile = new File(args[1]); InputStream inStream = new FileInputStream(inFile); OutputStream outStream = new FileOutputStream(outFile); while ( (z=inStream.read()) >=0 ) { outStream.write(z); } inStream.close(); outStream.close();

23 DVG Datenströme 23 OutputStream/WriterInputStream/Reader Bytetransport Datenstromgepufferter Transport Bytetransport gepufferter TransportDatenstrom RAMPipe RAM FOS/FW Netz Internet FIS/FR Internet Netz FileOutputStream FileWriter FileInputStream FileReader

24 DVG Datenströme 24 BufferedInputStream BufferedReader Dienen dem gepufferten Lesen von Datenströmen. Realisieren alle Methoden der Klasse InputStream bzw. Reader. Es wird mark-reset unterstützt. Konstruktoren von BufferedInputStream –BufferedInputStream(InputStream in) –BufferedInputStream(InputStream in, int size) size ist die Größe des Puffers Konstruktoren von BufferedReader –BufferedReader(Reader in) –BufferedReader(Reader in, int size) Methode in BufferedReader –String readLine() liest eine Zeile ein (bis '\n ) und gibt diese als String zurück; gibt null zurück, wenn Strom zu Ende

25 DVG Datenströme 25 Beispiel: Lesen einer Datei File inFile = new File(args[0]); BufferedReader inReader = new BufferedReader(new FileReader(inFile)); String z; while ( (z=inReader.readLine()) != null ) System.out.println(z); inReader.close();

26 DVG Datenströme 26 BufferedOutputStream BufferedWriter Dienen dem gepufferten Schreiben von Datenströmen. Realisieren alle Methoden der Klasse OutputStream bzw. Writer. Konstruktoren von BufferedOutputStream –BufferedOutputStream(OutputStream out) –BufferedOutputStream(OutputStream out, int size) size ist die Größe des Puffers Konstruktoren von BufferedWriter –BufferedWriter(Writer out) –BufferedWriter(Writer out, int size) Methode in BufferedWriter –void newLine() schreibt ein (ggf. systemabhängiges) Zeilenende-Zeichen

27 DVG Datenströme 27 Beispiel: Kopieren einer Datei File inFile = new File(args[0]); File outFile = new File(args[1]); InputStream inStream = new BufferedInputStream( new FileInputStream(inFile)); OutputStream outStream = new BufferedOutputStream( new FileOutputStream(outFile)); while ( (z=inStream.read()) >=0 ) { outStream.write(z); } inStream.close(); outStream.close();

28 DVG Datenströme 28 OutputStream/WriterInputStream/Reader Bytetransport Datenstrom BufferedOutputStream BufferedWriter Bytetransport BufferedInputStream BufferedReader Datenstrom RAMPipe RAM FOS/FW Netz Internet FIS/FR Internet Netz FileOutputStream FileWriter FileInputStream FileReader

29 DVG Datenströme 29 Die Klasse DataInputStream Dient dem Lesen von Daten in interner Darstellung von Datenströmen. Es werden Methoden zum Lesen primitiver Datentypen realisiert. Konstruktor –DataInputStream (InputStream in) Methoden zum Lesen primitiver Datentypen –boolean readBoolean() –char readChar() –byte readByte() –short readShort() –int readInt() –long readLong() –float readFloat() –double readDouble()

30 DVG Datenströme 30 –int readUnsignedByte() –int readUnsignedShort() –String readLine() liest Zeile im ASCII-Code –String readUTF() liest Zeile im UTF-8-Code

31 DVG Datenströme 31 Beispiel: Lesen einer Matrix File inFile = new File("Matrix.dat"); DataInputStream inStream = new DataInputStream( new BufferedInputStream( new FileInputStream(inFile))); double [][] matrix; int zeilen = inStream.readInt(); matrix = new double[zeilen][]; int spalten; for (int i=0; i

32 DVG Datenströme 32 Die Klasse DataOutputStream Dient dem Schreiben von Daten in interner Darstellung auf Datenströmen. Es werden Methoden zum Schreiben primitiver Datentypen realisiert. Konstruktor –DataOutputStream (OutputStream out) Methoden zum Schreiben primitiver Datentypen –void writeBoolean(boolean v) –void writeChar(char v) –void writeByte(byte v) –void writeShort(short v) –void writeInt(int v) –void writeLong(long v) –void writeFloat(float v) –void writeDouble(double v)

33 DVG Datenströme 33 –void writeBytes(String s) schreibt die Zeichen im ASCII-Code –void writeChars(String s) schreibt die Zeichen im Unicode –void writeUTF(String s) –schreibt die Zeichen im UTF-8-Format

34 DVG Datenströme 34 Beispiel: Schreiben einer Matrix File outFile = new File("Matrix.dat"); DataOutputStream outStream = new DataOutputStream( new BufferedOutputStream( new FileOutputStream(outFile))); double [][] matrix =...; outStream.writeInt(matrix.length); for (int i=0; i

35 DVG Datenströme 35 OutputStream/WriterInputStream/Reader Bytetransport DataOutputStream BuferedOutputStream BufferedWriter Bytetransport BuferedInputStream BufferedReader DataInputStream RAMPipe RAM FOS/FW Netz Internet FIS/FR Internet Netz FileOutputStream FileWriter FileInputStream FileReader

36 DVG Datenströme 36 Die Klasse ObjectInputStream Dient dem Lesen von Objekten in interner Darstellung von Datenströmen. Objekte, die mit einem ObjectInputStream gelesen werden sollen, müssen das Interface Serializable implementieren. Konstruktor –ObjectInputStream (InputStream in) Methoden –realisiert alle Lese-Methoden aus DataInputStream –Object readObject()

37 DVG Datenströme 37 Beispiel: Lesen einer Matrix File inFile = new File("Matrix.dat"); ObjectInputStream inStream = new ObjectInputStream( new BufferedInputStream( new FileInputStream(inFile))); double [][] matrix; matrix = (double[][])inStream.readObject(); inStream.close();

38 DVG Datenströme 38 Die Klasse ObjectOutputStream Dient dem Schreiben von Objekten in interner Darstellung auf Datenströme. Objekte, die mit einem ObjectOutputStream geschrieben werden sollen, müssen das Interface Serializable implementieren. Es werden alle enthaltenen Unterobjekte gespeichert. Konstruktor –ObjectOutputStream (OutputStream out) Methoden –realisiert alle Schreib-Methoden aus DataOutputStream –void writeObject (Object obj)

39 DVG Datenströme 39 Beispiel: Schreiben einer Matrix File outFile = new File("Matrix.dat"); ObjectOutputStream outStream = new ObjectOutputStream( new BufferedOutputStream( new FileOutputStream(outFile))); double [][] matrix =...; outStream.writeObject(matrix); outStream.close();

40 DVG Datenströme 40 OutputStream/WriterInputStream/Reader Bytetransport DataOutputStream ObjectOutputStream BuferedOutputStream BufferedWriter Bytetransport BuferedInputStream BufferedReader DataInputStream ObjectInputStream RAMPipe RAM FOS/FW Netz Internet FIS/FR Internet Netz FileOutputStream FileWriter FileInputStream FileReader

41 DVG Datenströme 41 Lesen von URLs URL addr = new URL( "http://www.wias-berlin.de/"+ "~telschow/dvg2/programme/File/dirf.java"); BufferedInputStream inStream = new BufferedInputStream(addr.openStream()); int z; while ( (z=inStream.read()) >=0 ) System.out.print((char)z); inStream.close();

42 DVG Datenströme 42 Weitere IO-Klassen InputStreamReader macht aus einem Bytestrom einen Zeichenstrom OutputStreamWriter macht aus einem Zeichenstrom einen Bytestrom ByteArrayInputStream bzw. ByteArrayOutputStream lesen bzw. schreiben auf Hauptspeicherbereiche, die sich in ByteArrays befinden. CharArrayReader bzw. CharArrayWriter lesen bzw. schreiben auf Hauptspeicherbereiche, die sich in CharArrays befinden. StringReader bzw. StringWriter lesen bzw. schreiben auf Hauptspeicherbereiche, die sich in Strings befinden. SequenceInputStream verknüpft mehrere Eingabeströme zu einem Strom.

43 DVG Datenströme 43 PipedInputStream, PipedOutputStream, PipedReader, PipedWriter lesen bzw. schreiben auf Pipes. PushbackInputStream, PushbackReader lesen von Strömen und ermöglichen die schon gelesenen Daten in den Eingabestrom zurückzustellen. StreamTokenizer liest den Eingabestrom und zerlegt ihn in Tokens. LineNumberReader liest Zeilen und zählt diese mit. RandomAccessFile erlaubt, auf eine Datei sowohl zu schreiben als auch von dieser zu lesen und in ihr beliebig zu positionieren.


Herunterladen ppt "DVG2 - 08 - Datenströme Datenströme. DVG2 - 08 - Datenströme 2 Filter und Pipes In UNIX eingeführte Abstraktion beim Datenaustausch Programme arbeiten."

Ähnliche Präsentationen


Google-Anzeigen