Berner Fachhochschule Hochschule für Technik und Informatik HTI Ein- Ausgabe Streams Unterlagen zum Modul "OOP mit Java" V 3.0 © 2011 by WBR1&MOU2/BFH-TI Ein- Ausgabe, Streams WBR1&MOU2/BFH-TI V3.0 © 2011 by Berner Fachhochschule Hochschule für Technik und Informatik HTI Streams Definition: Ein Stream ist eine zeitliche Sequenz von endlich vielen Ein- oder Ausgabedaten. Streams in Java: Alle Quellen und Senken von Daten (Files, Tastatur, Monitor, Modem, URL...) werden in Java durch so genannte Streams dargestellt. Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-4 Berner Fachhochschule Hochschule für Technik und Informatik HTI Anwenden von Streams Drei Phasen beim Nutzen von Streams: 1. 2. 3. Anmelden, initialisieren, verbinden Nutzen, lesen, schreiben Abmelden, freigeben Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-5 Berner Fachhochschule Hochschule für Technik und Informatik HTI Basisklassen für Streams • • Streams werden durch Java-Objekte dargestellt. Es sind sehr unterschiedliche Ströme denkbar, entsprechend viele Klassen gibt es. Alle diese Klassen lassen sich in folgenden 4 abstrakten Basisklassen einteilen: Bytes (0..255) Zeichen (Unicode) Lesen InputStream Reader Schreiben OutputStream Writer Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-6 Berner Fachhochschule Hochschule für Technik und Informatik HTI Übersicht Input-Streams Byte-Streams Bytes Stream: Bytes P r o g r a m m Character-Streams Reader: char InputStream Binäre-Streams DataInput: Daten Internet Daten Daten-Quellen Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-7 Berner Fachhochschule Hochschule für Technik und Informatik HTI Die Basisklasse InputStream • • • Ist eine abstrakte Klasse Abstraktion für alle konkret möglichen Byte-orientierten Eingangsströme. Vorteile der Abstraktion: Einheitlicher Code zum transferieren von Daten Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-8 Berner Fachhochschule Hochschule für Technik und Informatik HTI Klassenhierarchie für die InputStreams 3 Arten von InputStream Klassen: 1. Ebene: Die abstrakte Klasse InputStream 2. Ebene: Echte Quellen eines Byte-Streams 3. Ebene: Filter-InputStreams, diese definieren zusätzliche Funktionalität für die Eingabe. Ein InputStream kann mit beliebigen Filter-Funktionen angereichert werden. Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-9 Berner Fachhochschule Hochschule für Technik und Informatik HTI Klassenhierarchie für die InputStreams(2) Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-10 Berner Fachhochschule Hochschule für Technik und Informatik HTI Methoden von InputStream • • • void close(); int read(); int read(byte[] cbuf, int off, int len); Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-11 Berner Fachhochschule Hochschule für Technik und Informatik HTI Die Basisklasse Reader • • Ist eine abstrakte Klasse Abstraktion für alle konkret möglichen Charakterorientierten Eingangsströme. schlagen eine Brücke zwischen der Byte-orientierten (8-Bit) und der Unicode-orientierten (16-Bit) Welt . • – – – – FileReader übersetzt die Bytes in einem File in einen Charakter Stream InputStreamReader holt Charakters von einem Byte Stream StringReader liefert die Charakter eines Strings CharArrayReader liefert die Charakter eines Strings Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-12 Berner Fachhochschule Hochschule für Technik und Informatik HTI Erzeugen eines Readers, Variante 1 /* Byte-basiert (8-Bit) */ FileInputStream fis = new FileInputStream(„filename.txt“); /* Charakter-basiert (16-Bit) */ InputStreamReader isr = new InputStreamReader(fis); /* zur Beschleunigung der Methoden (z.B. Lesen) */ BufferedReader br = new BufferedReader(isr); int chr = br.read(); Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-13 Berner Fachhochschule Hochschule für Technik und Informatik HTI Erzeugen eines Readers, Variante 2 BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream(„name“)); Diese Variante ist weniger übersichtlich aber weit verbreitet. Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-14 Berner Fachhochschule Hochschule für Technik und Informatik HTI Standard Ein- und Ausgabe (Vordefinierte Streams) Standard-Eingaberichtung: • In Windows und UNIX: stdin • Zugriff aus Java mit System.in Standard-Ausgaberichtung: • In Windows und UNIX: stdout • Zugriff aus Java mit System.out Error-Ausgaberichtung: • In Windows und UNIX: stderr • Zugriff aus Java mit System.err Ein- Ausgabe, Streams Bsp:SystemIn.java System.out.println("text bla bla") Skript S.60 V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-15 Berner Fachhochschule Hochschule für Technik und Informatik HTI Ausgabe • • • Byte-orientierte Streams: OutputStreams Charakter-orientierte Streams: Writer Methoden: void close(); void write(); void flush(); Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-16 Berner Fachhochschule Hochschule für Technik und Informatik HTI Binäre Streams • • • • Eingabe: DataInputStream Ausgabe: DataOutputStream Filter für binäre Daten im „Internet-Format“ Methoden wie readBoolean(), readShort(), writeFloat() usw. Beispiel: FileInputStream fIn = new FileInputStream(“C://bsp.txt“); DataInputStream dIn = new DataInputStream(fin); double d = dIn.readDouble(); Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-17 Berner Fachhochschule Hochschule für Technik und Informatik HTI Zusammenfassung • • • • • Alle Ein- und Ausgaben (I/O) werden in Java mit Streams verarbeitet Es gibt 2 Arten von Streams: 8-Bit und 16-Bit 8-Bit: InputStreams resp. OutputStreams 16-Bit: Reader und Writer Jeder Streamtyp bietet einen bestimmten Dienst an, z.B. Character I/O, Byte I/O, I/O zu einem Bytearray Streams können miteinander verbunden werden, indem ein Stream dem andern Stream als Konstruktorargument übergeben wird Ein- Ausgabe, Streams V3.0 © 2011 by WBR1&MOU2/BFH-TI Folie 7-18