Ein- und Ausgabe

Werbung
Ein- und Ausgabe
Einführung in Java
Folie 1 von 14
12. Mai 2011
Ivo Kronenberg
Inhalt
•
Byte Streams
•
Character Streams
•
Buffern von Streams
•
Verketten von Streams
•
Streams für Konsole
•
Objekt-Serialisierung
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 2 von 14
I/O Stream
•
Repräsentation einer Datenquelle oder
Datensenke.
•
Unterstützung verschiedener Typen:
–
–
–
–
•
Unterstützung verschiedener Formate:
–
–
–
–
•
Dateien
Geräte
Andere Programme
Memorydaten
Bytes
Primitive Datentypen
Objekte
Lokalisierte Texte
Datenstrom ist eine Datensequenz
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 3 von 14
Byte Streams
•
Basisklasse für alle Streams:
– InputStream
– OutputStream
•
Arbeiten mit den verschiedene Streams ist
immer ähnlich. Lediglich Konstruktion variiert.
•
Dateizugriff:
– FileInputStream
– FileOutputStream
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 4 von 14
Beispiel: Kopieren von Datei
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
Exception von Streams
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
Konstruktion der Streams
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
-1 = Ende Stream
out.write(c);
}
} finally {
if (in != null) { in.close(); }
Schliessen der Streams
if (out != null) { out.close(); }
}
}
}
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 5 von 14
Character Streams
•
Automatische Konversion von Encoding der
Quelle / Senke nach Unicode (Java)
Java
Unicode
•
Konverter
Datei
ASCII
Alle Charakter Ströme erweitern Klassen
– Reader
– Writer
•
Intern basieren Character Streams auf Byte
Streams.
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 6 von 14
Beispiel: Zeilen kopieren
import java.io.FileReader;
import java.io.FileWriter;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.IOException;
public class CopyLines {
public static void main(String[] args) throws IOException {
BufferedReader is = null;
PrintWriter os = null;
try {
is = new BufferedReader(new FileReader(„…"));
os = new PrintWriter(new FileWriter(„…"));
String l;
while ((l = is.readLine()) != null) {
os.println(l);
}
} finally {
if (is != null) { is.close(); }
if (os!= null) { os.close(); }
}
}
}
Ein- und Ausgabe | Ivo Kronenberg
Buffered Character
Streams
12. Mai 2011
Folie 7 von 14
Buffern von Streams
•
Reduktion von vielen feingranularen Zugriffen auf
Dantenquelle bzw. Datensenke.
•
Gewinn von Performance.
•
Buffern von Byte Streams:
– in = new BufferedInputStream(new FileInputStream(„..“))
– out = new BufferedOutputStream(new
FileOutputStream(„…“))
•
Bufferen von Character Stream:
– inputStream = new BufferedReader(new FileReader(„…"));
– outputStream = new BufferedWriter(new FileWriter(„…"));
•
Flush Methode auf OutputStream nur effektiv für
gebufferte Streams.
•
Flush erlaubt das explizite niederschreiben der
Daten.
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 8 von 14
Verketten von Streams
•
Streams können verkettet werden.
•
Reihenfolge der Verkettung ist für Verhalten entscheidend.
•
Typische Anwendung ist das Buffern.
•
Verkettung geschieht bei Konstruktion.
new BufferedInputStream(new FileInputStream(„..“))
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 9 von 14
Stream Klassen
Eingabe
Byte
InputStream
ByteArrayInputStream
ByteArrayOutputStream
Obj ectInputStream
Obj ectOutputStream
PipedInputStream
PipedOutputStream
FileOutputStream
FileInputStream
FilterInputStream
FilterOutputStream
BufferedInputStream
BufferedOutputStream
Writer
Reader
CharArrayReader
InputStreamReader
Character
Ausgabe
OutputStream
CharArrayWriter
OutputStreamWriter
StringReader
StringWriter
PipedReader
PipedWriter
FilterReader
FilterWriter
BufferedReader
BufferedWriter
Ein- und Ausgabe | Ivo Kronenberg
PrintWriter
12. Mai 2011
Folie 10 von 14
Stream Typen
Quelle
Byte
Character
File
FileInputStream
FileOutputStream
ByteArrayInputStream
ByteArrayOutputStrea
m
FileReader
FileWriter
CharArrayReader
CharArrayWriter
Array
String
Pipe
PipedInputStream
PipedOutputStream
StringReader
StringWriter
PipedReader
PipedWriter
•
Pipe: Datenaustausch mittels Pipes zwischen
Threads
•
Array: In Memory Daten
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 11 von 14
I/O in Konsole
•
Datenströme Konsole nicht einheitlich:
– System.out // PrintStream
– System.in // InputStream
– System.err // PrintStream
•
Einlesen von Zeile über Konsole:
BufferedReader cin = new BufferedReader(new
InputStreamReader(System.in));
String line = cin.readLine();
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 12 von 14
Objekt-Serialisierung
•
Status von Objekt persistieren (Datenelemente).
•
Persistierbare Klasse muss Marker Interface
java.io.Serializable implementieren.
•
Persistiereung mittels ObjectOutputStream und
ObjectInputStream.
•
Persisiterung in binärem (Datei-) Format.
•
Versionierung mittels serialVersionUID.
•
Reihenfolge Datenelemente entscheidend.
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 13 von 14
Beispiel Objekt-Serialisierung
import java.io.*;
import java.util.*;
Serialisierbares
class Message implements Serializable {
Objekt
Date time = new Date();
String text;
}
class PostIt {
public static void main(String[] args) throws Exception {
Message msg = new Message();
ObjectOutputStream out;
try {
out = new ObjectOutputStream(
new FileOutputStream(„message.ser“));
out.writeObject(msg);
Objekt schreiben
} finally {
if(out != null) { out.close(); }
}
}
}
Ein- und Ausgabe | Ivo Kronenberg
12. Mai 2011
Folie 14 von 14
Herunterladen