Datenströme DVG2 - 08 - Datenströme.

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

der Universität Oldenburg
Objektorientierte Programmierung
der Universität Oldenburg
Ein- und Ausgabe von Dateien
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik F Verteilte Software - Java.
10 Streams JavaHS Merseburg WS 05/06 E/A - Ströme (Streams) in Java.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
SWITCH - Anweisung.
IF-ELSE-IF-Ketten Weiter mit PP..
Klassenvariable. Da man für jede Kuh bzw. jede Henne auf dem Markt den gleichen Preis für ein Liter Milch, bzw. den gleichen Preis für ein Ei bekommt,
Konstruktoren.
ARRAY oder FELD oder VEKTOR
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Klausur „Diskrete Mathematik II“
Java-Kurs - 2. Übung Entwicklungsumgebung Struktur von Programmen
Programmieren mit JAVA
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Zusammenfassung Vorwoche
DVG Dateien. DVG Die Klasse File Die Klasse File stellt die Verbindung zwischen dem File-System des Rechners und dem JAVA-Programm her.
Abstrakte Klassen DVG
DVG Ausnahmen1 Ausnahmen. DVG Ausnahmen 2 Was sind Programmfehler? Programm erzielt gar kein Ergebnis. Berechnetes Ergebnis stimmt nicht.
DVG Einführung in Java1 Einführung in JAVA.
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Klassenhierarchie Klassenhierarchie. DVG Klassenhierarchie 2 Klassenhierarchie Durch die Ableitung jeder Klasse aus genau einer Elternklasse.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Informatik 2 Typinformationen und Ein- und Ausgabe
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Copyright 2007 Bernd Brügge, Christian Herzog Grundlagen der Programmierung TUM Wintersemester 2007/08 Kapitel 10, Folie 1 2 Dr. Christian Herzog Technische.
Grundlagen der Informatik 1 Thema 20: Ströme und Ein-/Ausgabe in Java
Java für Fortgeschrittene
Copyright 2004 Bernd Brügge Einführung in die Informatik II TUM Sommersemester Prof. Bernd Brügge, Ph.D Institut für Informatik Technische Universität.
CuP - Java Eingabe über Tastatur, AudioClips, überschreiben, Quiz Montag, 18. November 2002.
Objektorientiertes Konstruieren
Optimale Ursprungsgerade
Algorithmen und Datenstrukturen SS 2005
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
PI Burgenland Java und JavaScript 1. Teil
Programmiervorkurs WS 2014 Referenzdatentypen
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Programmierpraktikum Java SS 2005 Mag.Thomas Hilpold.
Informatik I : Software höhere Programmiersprachen Java Klassen: hat Methoden (Funktionen) und Daten (Variablen) es kann mehrere Klassen geben nur eine.
1 Tagesüberblick 4 Lösung Hausaufgabe/Fragen Mustervergleiche.
Java Syntaxdiagramme Buchstabe A B Z a z ... Ziffer
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
2 Datenabstraktion Geheimnisprinzip:
Java-AG Datenstreams: Dateibehandlung, Lesen aus und schreiben in eine Datei.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer, Dr. Thomas H. Kolbe Einführung in die Programmierung mit Java 12. Vorlesung WS 2001/2002.
Ein- und Ausgabe in Java Packet: java.io
OOP mit Java Oder: Java in 5 Tagen. 1. Tag Klassen und Methoden Hello World in Variationen Von Menschen und Geschlechtern Horden (Schlange stehen)
Ein-/ Ausgabe in Java ein Überblick. © eigentlich ganz einfach ? Ein-/Ausgabe durch package java.io Ausgabe (auf Konsole) mit System.out.println()
, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Ein- und Ausgabe in der Programmiersprache Java.
Java I/O Input / Output stream Library
Java I/O Input / Output stream Library
Konstruktoren.
 Präsentation transkript:

Datenströme DVG2 - 08 - Datenströme

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 DVG2 - 08 - Datenströme

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 < i.dat | p2 | p3 > o.dat DVG2 - 08 - Datenströme

Filter System.in System.out Programm Filter Eingabestrom Ausgabestrom DVG2 - 08 - Datenströme

Pipes Pipe Programm Filter Eingabestrom Ausgabestrom Programm Filter DVG2 - 08 - Datenströme Programm Filter Eingabestrom Ausgabestrom

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. DVG2 - 08 - Datenströme

Schichtenmodell Datenerzeuger Datenverbraucher Datenstrom Datenstrom gepufferter Transport gepufferter Transport Bytetransport Bytetransport Netz Internet File RAM Pipe Pipe RAM File Internet Netz DVG2 - 08 - Datenströme

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. DVG2 - 08 - Datenströme

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. DVG2 - 08 - Datenströme

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 DVG2 - 08 - Datenströme

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 DVG2 - 08 - Datenströme

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. DVG2 - 08 - Datenströme

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 DVG2 - 08 - Datenströme

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 DVG2 - 08 - Datenströme

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(); DVG2 - 08 - Datenströme

gepufferter Transport gepufferter Transport OutputStream/Writer InputStream/Reader Datenstrom Datenstrom gepufferter Transport gepufferter Transport Bytetransport Bytetransport Netz Internet File RAM Pipe Pipe RAM File Internet Netz DVG2 - 08 - Datenströme

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 DVG2 - 08 - Datenströme

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. DVG2 - 08 - Datenströme

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 DVG2 - 08 - Datenströme

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(); DVG2 - 08 - Datenströme

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) DVG2 - 08 - Datenströme

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(); DVG2 - 08 - Datenströme

gepufferter Transport gepufferter Transport OutputStream/Writer InputStream/Reader Datenstrom Datenstrom gepufferter Transport gepufferter Transport Bytetransport Bytetransport Netz Internet FOS/FW RAM Pipe Pipe RAM FIS/FR Internet Netz DVG2 - 08 - Datenströme FileOutputStream FileWriter FileInputStream FileReader

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 DVG2 - 08 - Datenströme

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(); DVG2 - 08 - Datenströme

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 DVG2 - 08 - Datenströme

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(); DVG2 - 08 - Datenströme

BufferedOutputStream OutputStream/Writer InputStream/Reader Datenstrom Datenstrom BufferedOutputStream BufferedWriter BufferedInputStream BufferedReader Bytetransport Bytetransport Netz Internet FOS/FW RAM Pipe Pipe RAM FIS/FR Internet Netz DVG2 - 08 - Datenströme FileOutputStream FileWriter FileInputStream FileReader

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() DVG2 - 08 - Datenströme

int readUnsignedByte() int readUnsignedShort() String readLine() liest Zeile im ASCII-Code String readUTF() liest Zeile im UTF-8-Code DVG2 - 08 - Datenströme

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(); DVG2 - 08 - Datenströme

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) DVG2 - 08 - Datenströme

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 DVG2 - 08 - Datenströme

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(); DVG2 - 08 - Datenströme

DataOutputStream DataInputStream OutputStream/Writer InputStream/Reader DataOutputStream DataInputStream BuferedOutputStream BufferedWriter BuferedInputStream BufferedReader Bytetransport Bytetransport Netz Internet FOS/FW RAM Pipe Pipe RAM FIS/FR Internet Netz DVG2 - 08 - Datenströme FileOutputStream FileWriter FileInputStream FileReader

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() DVG2 - 08 - Datenströme

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(); DVG2 - 08 - Datenströme

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) DVG2 - 08 - Datenströme

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(); DVG2 - 08 - Datenströme

Bytetransport Bytetransport Netz Internet RAM Pipe Pipe RAM Internet OutputStream/Writer InputStream/Reader DataOutputStream ObjectOutputStream DataInputStream ObjectInputStream BuferedOutputStream BufferedWriter BuferedInputStream BufferedReader Bytetransport Bytetransport Netz Internet FOS/FW RAM Pipe Pipe RAM FIS/FR Internet Netz DVG2 - 08 - Datenströme FileOutputStream FileWriter FileInputStream FileReader

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(); DVG2 - 08 - Datenströme

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. DVG2 - 08 - Datenströme

StreamTokenizer liest den Eingabestrom und zerlegt ihn in Tokens. 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. DVG2 - 08 - Datenströme