Streams und Files. Datenströme Byteweises Lesen und Schreiben Zeichenweises Lesen und Schreiben Dateien Serialisierung

Ähnliche Dokumente
Programmieren 2 Selbststudium Semesterwoche 6

Vorlesung Programmieren

Programmieren in Java

Programmieren I. Kapitel 15. Ein und Ausgabe

Ein- und Ausgabe in Java

Dr. Monika Meiler. Inhalt

Programmieren 2 09 File-IO

Programmieren I und II

Java Schulung. Objektorientierte Programmierung in Java Teil VI: Wichtige Java Pakete. Prof. Dr. Nikolaus Wulff

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Programmieren in Java

PREV CLASS NEXT CLASS FRAMES NO FRAMES All Classes

Liebe Leserin, lieber Leser, in der ersten Auflage von Programmieren lernen mit Java von Hans- Peter Habelitz sind einige Fehler zu korrigieren.

Java Schulung (Java 2 Java Development Kit 5 / 6)

12 Datenströme und Dateien

Vorlesung Programmieren

Distributed Computing Group

Java-Schulung Grundlagen

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

9. Remote Method Invocation Grundlagen der Programmierung II (Java)

Programmieren in Java

Programmieren in Java

Einführung in die Informatik Files and Streams

Einführung in die Informatik II

von Anja Austermann Drag and Drop

VS4 Slide 1. Verteilte Systeme. Vorlesung 4 vom Dr. Sebastian Iwanowski FH Wedel

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Remote Method Invocation

1 Polymorphie (Vielgestaltigkeit)

Programmieren 2 10 Binäre und Objekt-IO

Datenbankanwendungsprogrammierung Crashkurs Java

Networking. Motivation Grundlagen von Sockets Klasse Socket Klasse ServerSocket Exceptions Klasse URL

Java-Programmierung. Remote Method Invocation - RMI

5. Übung zu Software Engineering

3 Objektorientierte Konzepte in Java

3 Objektorientierte Konzepte in Java

Musterlösung: Wortstatistik

E.1 Object Request Brokers

Java für Computerlinguisten

Algorithmen und Datenstrukturen

Primitive Datentypen

Beispiel Time Client/Server

Große Übung Praktische Informatik 1

5.4 Klassen und Objekte

Universität Stuttgart Institut für Automatisierungs- und Softwaretechnik Prof. Dr.-Ing. Dr. h. c. P. Göhner. Java-Kurs am IAS. Java 2012, IAS.

Themen. Web Service - Clients. Kommunikation zw. Web Services

Eine Klasse beschreibt Objekte mit gleichen Attributen und Methoden.

1. Der Einstieg in Java. Was heißt Programmieren?

Java RMI Remote Method Invocation

Programmieren in Java

7. Pakete Grundlagen der Programmierung 1 (Java)

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Probeklausur: Programmierung WS04/05

II.1.1. Erste Schritte - 1 -

Remote- und Server-Programmierung. Dr. Wolfgang Süß Thorsten Schlachter

Programmieren II. Remote-Programmierung. Institut für Angewandte Informatik

1. Sei der String s = new String( xyzzy ) gegeben. Welcher Aufruf verändert s?

Programmieren in Java

Hadoop I/O. Datenintegrität Kompression Serialisierung Datei-basierte Datenstrukturen Prof. Dr. Christian Herta 1/29

1. Grundlegende Konzepte in Java (6 Punkte)

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Timer. Sockets.

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Objektorientierte Programmierung

Ein erstes Java-Programm

Repetitorium Informatik (Java)

Javakurs für Anfänger

Musterlösungen zur Klausur Informatik 3

Netzwerkprogrammierung

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Programmiermethodik. Übung 13

7. Objektorientierte Softwareentwicklung/3. Informatik II für Verkehrsingenieure

Programmieren I. Prinzipieller Ablauf. Eigenschaften von JAVA. Source-Code Javac Bytecode. Java Virtual Machine (Java, Browser, Appletviewer)

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Objektorientierte Programmierung. Kapitel 12: Interfaces

Synchronisation in Java. Invisible Web

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Scripting und Compilation

i n g e n i e u r b ü r o f ü r s o f t w a r e t e c h n o l o g i e w w w. v o e l t e r. d e Servlet Debugging

Type Erasure in Java 5. Helmi Jouini Institut für Theoretische Informatik Universität Karlsruhe

Java Schulung (Java 2 Java Development Kit 5 / 6)

Java Real-Time Specification

Arrays Fortgeschrittene Verwendung

Klassenattribute und -methoden, Vererbung

Sie müssen den Test bis 20:00 Uhr am Abgabetag dieses Übungszettels absolviert haben.

Kapitel 6. Vererbung

Programmieren II. Sockets. Vorlesung 16. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Sockets.

JDBC. Allgemeines ODBC. java.sql. Beispiele

Einführung in die Programmierung für Wirtschaftsinformatik

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Kapitel 6. Vererbung

Kapitel 6. Vererbung

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Berner Fachhochschule Software Schule Schweiz JDOM. Beatrice Amrhein. Oktober 06

DHBW Karlsruhe, Vorlesung Programmieren, Events Musterlösung

Applets Belebung von Webseiten. Dipl.-Ing. Wolfgang Beer

Angewandte IT-Sicherheit

Applet Firewall und Freigabe der Objekte

Praktikum aus Softwareentwicklung 2, Stunde 8

Transkript:

Streams und Files Datenströme Byteweises Lesen und Schreiben Zeichenweises Lesen und Schreiben Dateien Serialisierung Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 1

Streams und Files Datenströme Byteweises Lesen und Schreiben Zeichenweises Lesen und Schreiben Dateien Serialisierung Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 2

Streaming Ein/Ausgabe und Fluss von Daten Daten werden nicht auf einmal übertragen, sondern fließen in einem kontinuierlichen Prozess Datenquellen Input Output Datensenken Eingabestrom verbindet Datenquelle mit Programm Ausgabestrom verbindet Programm mit Datensenke Streams abstrahieren von konkreten Quellen und Senken Terminal- oder Konsolenfenster Dateien Client- und Serverprogramme InputStream Programm OutputStream Daten quelle Daten senke Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 3

Streaming in Java Paket java.io Byteorientierte Ein- und Ausgabe Zeichenorientierte Ein- und Ausgabe Paket java.nio Puffer und Kanäle 2 Arten von Streams Byte-Streams: byte-weises Lesen und Schreiben - InputStream- und OutputStream-Klassen Char-Streams: zeichenweises Lesen und Schreiben (Unicode) - Reader- und Writer-Klassen Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 4

Streams und Files Datenströme Byteweises Lesen und Schreiben Zeichenweises Lesen und Schreiben Dateien Serialisierung Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 5

Basisklasse InputStream abstrakte Basisimplementierung, von der konkrete InputStreams abgeleitetet werden abstrakte Methode read(), die ein Zeichen liest konkrete Implementierungen aller anderen Methoden Methoden arbeiten synchron, d.h. blockieren, solange bis Operation abgeschlossen Methoden werfen IOExceptions, wenn etwas schief geht public abstract class InputStream { public abstract int read() throws IOException public int read(byte b[]) throws IOException public int read(byte b[], int off, int len) throws IOException public long skip(long n) throws IOException public int available() throws IOException public void close() throws IOException public synchronized void mark(int readlimit) public synchronized void reset() throws IOException public boolean marksupported() Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 6

Basisklasse OutputStream abstrakte Basisimplementierung, von der konkrete OutputStreams abgeleitetet werden abstrakte Methode write(), die ein einzelnes Zeichen schreibt konkrete Implementierungen aller anderen Methoden Methoden arbeiten synchron, d.h. blockieren, solange bis Operation abgeschlossen Methoden werfen IOExceptions, wenn etwas schief geht public abstract class OutputStream { public abstract void write(int b) throws IOException; public void write(byte b[]) throws IOException public void write(byte b[], int off, int len) throws IOException public void flush() throws IOException public void close() throws IOException public class IOException extends Exception { public IOException() public IOException(String s) Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 7

Realisierung von konkreten Stream-Klassen Ableiten von InputStream bzw. OutputStream Überschreiben der abstrakten Methoden read() bzw. write() Z.B.: FileInputStream: Lesen von Dateien public class FileInputStream extends InputStream { public FileInputStream(String name) throws FileNotFoundException public FileInputStream(File file) throws FileNotFoundException public native int read() throws IOException Z.B.: FileOutputStream: Schreiben auf Dateien public class FileOutputStream extends OutputStream { public FileOutputStream(String name) throws FileNotFoundException public FileOutputStream(String name, boolean append) throws FileNotFoundException public FileOutputStream(File file) throws FileNotFoundException public native void write(int b) throws IOException native implementiert! native implementiert! Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 8

Beispiel: Kopieren einer Datei static void copyfile(string ifile, String ofile) { InputStream in = null; OutputStream out = null; try { in = new FileInputStream(ifile); out = new FileOutputStream(ofile); int b = in.read(); while (b >= 0) { out.write(b); b = in.read(); catch (FileNotFoundException e) { System.out.println("File does not exist"); catch (IOException e) { System.out.println("Error in reading or writing file"); finally { if (in!= null) { try { in.close(); catch (IOException ioe) { if (out!= null) { try { out.close(); catch (IOException ioe) { Man beachte das Abfangen der Exceptions!! Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 9

Filter-Streams: Überlagern von Streams FilterStreams sind Streams, die auf einem anderen Stream aufbauen Ketten von Streams bilden, um Basisstreams mit weiterer Funktionalität anzureichern Höhere Schnittstellen zur Verfügung zu stellen Daten quelle Input Stream Filter Input Stream Filter Input Stream Prgm Filter Output Stream Filter Output Stream Output Stream Daten senke InputStream fin = new FileInputStream("input.txt"); BufferedInputStream bin = new BufferedInputStream(fin); DataInputStream din = new DataInputStream(bin); OutputStream fout = new FileOutputStream("output.txt"); BufferedOutputStream bout = new BufferedOutputStream(fout); DataOutputStream dout = new DataOutputStream(bout); Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 10

FilterStreams: BufferedInputStream - BufferedOutputStream Gepufferte Eingabe: BufferedInputStream Effizienz durch Vorauslesen File ifile = new File( inputfile.txt ); InputStream in = new BufferedInputStream( new FileInputStream(ifile)); Gepufferte Ausgabe: BufferedOutputStream Effizienz durch verzögertes Schreiben Tatsächliche Ausgabe erst wenn Puffer voll Methode flush erzwingt Ausgabe des Puffers File ofile = new File( outputfile.txt ); OutputStream out = new BufferedOutputStream( new FileOutputStream(ofile)); Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 11

FilterStreams: DataInputStream - DataOutputStream Ausgabe primitiver Datentypen public class DataOutputStream extends FilterOutputStream { void writeboolean(boolean v); void writebyte(int v); void writebytes(string s); void writechar(int v); void writechars(string s); void writedouble(double v); void writefloat(float v); void writeint(int v); void writelong(long v); void writeshort(int v); void writeutf(string str);... public class DataInputStream extends FilterInputStream { boolean readboolean(); byte readbyte(); char readchar(); double readdouble(); float readfloat(); int readint(); long readlong(); short readshort(); int readunsignedbyte(); int readunsignedshort(); String readutf();... File fout = new File("output.data"); DataOutputStream out = new DataOutputStream( new FileOutputStream(fout)); out.writedouble(math.pi); out.close(); output: 0x40 0x09 0x21 0xfb ; @.!û 0x54 0x44 0x2d 0x18 ; TD-. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 12

InputStream Klassenhierarchie PipedInputStream InputStream SequenceInputStream FileInputStream BufferedInputStream CheckedInputStream FilterInputStream DigestInputStream ZipInput Stream JarInput Stream StringBufferInputStream ByteArrayInputStream InflaterInputStream LineInputStream GZIPInput Stream ObjectInputStream PushBackInputStream DataInputStream <<interface>> ObjectInput <<interface>> DataInput Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 13

OutputStream Klassenhierarchie OutputStream PipedOutputStream FileOutputStream BufferedOutputStream CheckedOutputStream FilterOutputStream DigestOutputStream ZipOutput Stream JarOutput Stream ByteArrayOutputStream DeflaterOutputStream PrintStream GZIPOutput Stream ObjectOutputStream DataOutputStream <<interface>> ObjectOutput <<interface>> DataOutput Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 14

Diverse Streamklassen public class PipedOutputStream extends OutputStream { void connect(pipedinputstream snk);... public class PipedInputStream extends InputStream { void connect(pipedoutputstream src);... public class PushbackInputStream extends InputStream { int read(); void unread(int b);... public class PrintStream extends FilterOutputStream { public void print(boolean b) public void print(int b) public void println(boolean b) Realisierung von Pipes unterstützt Zurückschreiben (unread) formatierte Ausgabe von Daten mittels print und println- Methoden Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 15

Standardstreams Streams in der Klasse System static InputStream in; // the standard input stream static PrintStream out; // the standard output stream static PrintStream err; // the standard error stream Filtern der Standardstreams BufferedReader input = new BufferedReader( new InputStreamReader(System.in)); String line = input.readline(); Umleiten der Standardstreams java Foo < input.txt > output.txt 2> error.txt oder java Foo > output.txt 2>&1 oder java Foo >> output.txt Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 16

Hierarchie der Ausnahmen Exception ClassNotFoundException IOException FileNotFoundException EOFException ObjectStreamException NotSerializableException Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 17

Streams und Files Datenströme Byteweises Lesen und Schreiben Zeichenweises Lesen und Schreiben Dateien Serialisierung Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 18

Zeichenorientierte Ein- und Ausgabe Ein- und Ausgabe von 16-Bit-Unicode-Zeichen über Readers und Writers Basisklassen Reader (abstrakte Basisklasse analog zu InputStream) Writer (abstrakte Basisklasse analog zu OutputStream) Dateien sind byteorientiert Abbildung von Zeichen auf Bytes erforderlich ByteToCharConverter und CharToByteConverter FileReader und FileWriter verwenden Standardcodierung Andere Codierungen mittels InputStreamReader und OutputStreamWriter Writer out = new OutputStreamWriter( new FileOutputStream("fname"), "UTF8" // encoding parameter ); Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 19

Basisklasse Reader abstrakte Basisimplementierung, von der konkrete Reader abgeleitetet werden abstrakte Methode read(char[] cbuf, int off, int len) welche einen char-array schreibt anderen Methoden bauen auf dieser auf public abstract class Reader { public int read() throws IOException public int read(char[] cbuf) throws IOException public abstract int read(char[] cbuf, int off, int len) throws IOException public long skip(long n) throws IOException public boolean ready() throws IOException public synchronized void mark(int readlimit) public synchronized void reset() throws IOException public boolean marksupported() public abstract void close() throws IOException Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 20

Basisklasse Writer abstrakte Basisimplementierung, von der konkrete Writer abgeleitetet werden abstrakte Methode write(char[] cbuf, int off, int len) welche einen char-array füllt anderen Methoden bauen auf dieser auf public abstract class Writer { public void write(int c) throws IOException public void write(char[] cbuf) throws IOException public abstract void write(char[] cbuf, int off, int len) throws IOException public void write(string str) throws IOException public void write(string str, int off, int len) throws IOException public abstract void flush() throws IOException public abstract void close() throws IOException Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 21

Beispiel: FilterReader - FilterWriter Filtern der Standardstreams String line; BufferedReader input = new BufferedReader( new InputStreamReader(System.in)); try { line = input.readline(); catch (IOException ioe) { ioe.printstacktrace(); BufferedWriter output = new BufferedWriter( new OutputStreamWriter(System.out)); try { output.write(line); output.newline(): catch (IOException ioe) { ioe.printstacktrace(); Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 22

Reader Klassenhierarchie PipedReader InputStreamReader FileReader Reader FilterReader PushbackReader StringReader CharArrayReader BufferedReader LineNumberReader Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 23

Diverse Reader public class InputStreamReader extends Reader{ public InputStreamReader(InputStream in)... public class LineNumberReader extends Reader { int getlinenumber();... public class BufferedReader extends Reader { public String readline() throws IOException... public class PushbackReader extends Reader { public void unread(char[] cbuf, int off, int len) throws IOException... public class PipedReader extends Reader { public void connect(pipedwriter src) throws IOException Brücke zu InputStream Zugriff auf Zeilennummern gepufferte Eingabe unterstützt zeilenweises Lesen (readline) unterstützt Zurückschreiben (unread) Realisierung von Pipes in Kombination mit PipedWriter Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 24

Writer Klassenhierarchie PipedWriter OutputStreamWriter FileWriter Writer FilterWriter StringWriter CharArrayWriter BufferedWriter PrintWriter Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 25

Diverse Writer public class OutputStreamWriter extends Writer public OutputStreamWriter (OutputStream out)... public class PrintWriter extends Writer { public void print(boolean b) public void print(int b) public void println(boolean b) public class BufferedWriter extends Writer { public void newline() throws IOException public void flush() throws IOException... public class PipedWriter extends Writer { public void connect(pipedreader snk) throws IOException Brücke zu OutputStream formatierte Ausgabe von Daten als Text mittels print und println- Methoden gepufferte Ausgabe unterstützt neue Zeile (newline) Realisierung von Pipes in Kombination mit PipedReader Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 26

Streams und Files Datenströme Byteweises Lesen und Schreiben Zeichenweises Lesen und Schreiben Dateien Serialisierung Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 27

File Abstrakte Repräsentation einer Datei oder eines Verzeichnisses Konstruktor greift noch nicht auf Dateisystem zu Definiert plattformspezifische Trennzeichen separator und pathseparator Erzeugen von Dateiströmen Mittels Dateinamen oder File-Objekt public class File { boolean canread(); boolean canwrite(); boolean delete(); boolean exists(); String getname() boolean isdirectory(); boolean isfile(); long lastmodified(); long length(); String[] list(); File[] listfiles();... static long totalsize(file dir) { if (!dir.isdirectory()) { return -1; long size = 0; File[] files = dir.listfiles(); for (int i = 0; i < files.length; i++) { size += files[i].length(); return size; Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 28

Streams und Files Datenströme Byteweises Lesen und Schreiben Zeichenweises Lesen und Schreiben Dateien Serialisierung Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 29

Serialisierung von Objekten Speichern des Zustands von Objekten Plattformunabhängige Transformation in Bytes Objektpersistenz, Kommunikation von Programmen Serialisierung Klasse muss Serializable implementieren Keine Serialisierung statischer oder transienter Felder Transitive Hülle Referenzen auf andere Objekte werden ebenfalls serialisiert public class ObjectOutputStream { void writeboolean(boolean data); void writebyte(int data);... void writeobject(object obj);... ObjectOutputStream out = new ObjectOutputStream( new FileOutputStream("data")); Person p =...; out.writeobject(p); Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 30

Serializable Nur Objekte die Serializable implementieren, können serialisiert werden Damit werden alle Felder, die serialisierbar sind, automatisch mit dem Objekt serialisiert Felder mit Basisdatentypen Felder mit Typen, die serialisierbar sind Kennzeichnet man Felder mit transient, werden diese nicht serialisiert!! transient: Verhinderung der Serialisierung public interface Serializable { public class Person implements Serializable { private String name; private int age; private List<Person> children; private transient List<PropertyChangeListener> listener; Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 31

Serialisierbare / Nicht-serialisierbare Datentypen Serialisierbar: Basisdatentypen (int, boolean, double, ) Alle Arrays String Collections: ArrayList, LinkedList, TreeSet, Date, Time, Calendar,... Alle Typen die Serializable implementieren Nicht serialisierbar: Component, JComponent, etc GUI Komponenten Thread, ClassLoader, etc. Objekte der Java-VM InputStream, Socket, File etc. Objekte, die auf Betriebssystemressourcen zugreifen Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 32

Serialisierung von Objektgraphen Kunde Name = Max Bank Name = SSW Konten Konto Betrag = 100 Besitzer Next Konto Betrag = 500 Besitzer Next Mehrere Referenzen auf das selbe Objekt: 1. Besuch: Objekt vollständig schreiben weiterer Besuch: nur ID des Objekts schreiben (Bank) "SSW" (Konto) 100 (Kunde) "Max" (Konto) 500 (Kunde) 878 Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 33

Deserialisierung Einlesen eines Objekts Allokation von Speicher und Initialisierung mit null ClassNotFoundException falls Klasse nicht vorhanden Einlesen des Objekts Statische und transiente Felder werden ignoriert Erzeugt Kopie der transitiven Hülle Identität mehrfach referenzierter Objekte bleibt erhalten Aufruf des Standardkonstruktors für nicht serialisierbare Objekte public class ObjectInputStream { boolean readboolean(); byte readbyte();... Object readobject();... ObjectInputStream in = new ObjectInputStream( new FileInputStream("data")); Person p = (Person) in.readobject(); Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 34

Benutzerdefinierte Serialisierung Implementierung der optionalen Methoden Serialisierung der Superklasse geschieht automatisch private void writeobject(objectoutputstream stream) throws IOException; private void readobject(objectinputstream stream) throws IOException, ClassNotFoundException; Ersetzung durch ein anderes Objekt z.b. Ersetzung eines Remote-Objekts durch Stub ANY-ACCESS-MODIFIER Object writereplace() throws ObjectStreamException; ANY-ACCESS-MODIFIER Object readresolve() throws ObjectStreamException; Implementierung des Interfaces Externalizable Nur Identität der Klasse wird automatisch gespeichert public void writeexternal(objectoutput out) throws IOException; public void readexternal(objectinput in) throws IOException, ClassNotFoundException; Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 35

Zusammenfassung Datenströme Verbinden Datenquelle mit Programm oder Programm mit Datensenke Byteorientierte Datenströme InputStream und OutputStream FileInputStream und FileOutputStream Zeichenorientierte Datenströme Reader und Writer Gepufferte Datenströme BufferedInputStream und BufferedOutputStream BufferedReader und BufferedWriter Serialisierung Plattformunabhängige Transformation des Objektgraphen in Bytes Siehe auch RMI Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H. Prähofer 36