43
DVG2 - 08 - Datenströme Datenströme

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

Embed Size (px)

Citation preview

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

DVG2 - 08 - Datenströme

Datenströme

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

DV

G2 - 08 - D

atenströ

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 = TastaturAusgabestrom = Bildschirm

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

DV

G2 - 08 - D

atenströ

me

3

Umleitung von Datenströmen

Umleitung von Datenströmen wird vom System unterstützt: ">" bzw. ">>" Umleitung des Ausgabedatenstroms

z.B.: programm > ausgabe.datleitet die Ausgabe des Programms in eine Datei um ">" erzeugt neue Datei, ">>" hängt an vorhandene Datei an

"<" Umleitung des Eingabedatenstromsz.B.: programm < eingabe.datprogramm liest die Eingaben von einer Datei statt von der Tastatur

"|" Verbindet die Ausgabe eines Programms mit der Eingabe eines anderen Programmsz.B.: programm1 | programm2der von programm1 erzeugte Ausgabestrom wird von programm2 als Eingabestrom benutzt

Kombinationen sind möglich:z.B.: p1 < i.dat | p2 | p3 > o.dat

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

DV

G2 - 08 - D

atenströ

me

4

Filter

ProgrammFilter

Eingabestrom Ausgabestrom

System.in System.out

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

DV

G2 - 08 - D

atenströ

me

5

Pipes

ProgrammFilter

Eingabestrom Ausgabestrom

ProgrammFilter

Eingabestrom Ausgabestrom

Pipe

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

DV

G2 - 08 - D

atenströ

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.

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

DV

G2 - 08 - D

atenströ

me

7

Datenerzeuger Datenverbraucher

Schichtenmodell

Bytetransport

Datenstrom

gepufferter Transport

Bytetransport

gepufferter Transport

Datenstrom

RAM Pipe Pipe RAMFileNetz

Internet

File

Internet

Netz

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

DV

G2 - 08 - D

atenströ

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.

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

DV

G2 - 08 - D

atenströ

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.

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

DV

G2 - 08 - D

atenströ

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

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

DV

G2 - 08 - D

atenströ

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

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

DV

G2 - 08 - D

atenströ

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.

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

DV

G2 - 08 - D

atenströ

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

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

DV

G2 - 08 - D

atenströ

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

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

DV

G2 - 08 - D

atenströ

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();

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

DV

G2 - 08 - D

atenströ

me

16

OutputStream/Writer InputStream/Reader

Bytetransport

Datenstrom

gepufferter Transport

Bytetransport

gepufferter Transport

Datenstrom

RAM Pipe Pipe RAMFileNetz

Internet

File

Internet

Netz

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

DV

G2 - 08 - D

atenströ

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

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

DV

G2 - 08 - D

atenströ

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.

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

DV

G2 - 08 - D

atenströ

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

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

DV

G2 - 08 - D

atenströ

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();

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

DV

G2 - 08 - D

atenströ

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)

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

DV

G2 - 08 - D

atenströ

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();

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

DV

G2 - 08 - D

atenströ

me

23

OutputStream/Writer InputStream/Reader

Bytetransport

Datenstrom

gepufferter Transport

Bytetransport

gepufferter Transport

Datenstrom

RAM Pipe Pipe RAMFOS/FWNetz

Internet

FIS/FR

Internet

Netz

FileOutputStreamFileWriter

FileInputStreamFileReader

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

DV

G2 - 08 - D

atenströ

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

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

DV

G2 - 08 - D

atenströ

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();

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

DV

G2 - 08 - D

atenströ

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

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

DV

G2 - 08 - D

atenströ

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();

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

DV

G2 - 08 - D

atenströ

me

28

OutputStream/Writer InputStream/Reader

Bytetransport

Datenstrom

BufferedOutputStreamBufferedWriter

Bytetransport

BufferedInputStreamBufferedReader

Datenstrom

RAM Pipe Pipe RAMFOS/FWNetz

Internet

FIS/FR

Internet

Netz

FileOutputStreamFileWriter

FileInputStreamFileReader

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

DV

G2 - 08 - D

atenströ

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()

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

DV

G2 - 08 - D

atenströ

me

30

– int readUnsignedByte()– int readUnsignedShort()– String readLine()

liest Zeile im ASCII-Code– String readUTF()

liest Zeile im UTF-8-Code

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

DV

G2 - 08 - D

atenströ

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<matrix.length; i++){ spalten=inStream.readInt(); matrix [i] = new double[spalten]; for (int j=0;j<matrix[i].length;j++) matrix[i][j]=inStream.readDouble();}inStream.close();

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

DV

G2 - 08 - D

atenströ

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)

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

DV

G2 - 08 - D

atenströ

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

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

DV

G2 - 08 - D

atenströ

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<matrix.length; i++){ outStream.writeInt(matrix[i].length); for (int j=0;j<matrix[i].length;j++) outStream.writeDouble(matrix[i][j]);}outStream.close();

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

DV

G2 - 08 - D

atenströ

me

35

OutputStream/Writer InputStream/Reader

Bytetransport

DataOutputStream

BuferedOutputStreamBufferedWriter

Bytetransport

BuferedInputStreamBufferedReader

DataInputStream

RAM Pipe Pipe RAMFOS/FWNetz

Internet

FIS/FR

Internet

Netz

FileOutputStreamFileWriter

FileInputStreamFileReader

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

DV

G2 - 08 - D

atenströ

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()

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

DV

G2 - 08 - D

atenströ

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();

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

DV

G2 - 08 - D

atenströ

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)

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

DV

G2 - 08 - D

atenströ

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();

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

DV

G2 - 08 - D

atenströ

me

40

OutputStream/Writer InputStream/Reader

Bytetransport

DataOutputStreamObjectOutputStream

BuferedOutputStreamBufferedWriter

Bytetransport

BuferedInputStreamBufferedReader

DataInputStreamObjectInputStream

RAM Pipe Pipe RAMFOS/FWNetz

Internet

FIS/FR

Internet

Netz

FileOutputStreamFileWriter

FileInputStreamFileReader

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

DV

G2 - 08 - D

atenströ

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();

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

DV

G2 - 08 - D

atenströ

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.

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

DV

G2 - 08 - D

atenströ

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.