25/07/2015walther-rathenau- gewerbeschule 1 ein- und ausgabe in java packet: java.io

30
05/07/22 Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

Upload: marta-ritter

Post on 06-Apr-2016

217 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 1

Ein- und Ausgabe in JavaPacket: java.io

Page 2: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 2

Page 3: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

DatenDaten

DatenDaten

Daten

Page 4: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 4

Das Stream-Konzept in Java

• Ein Stream besteht aus einer Quelle, der Daten an ein Ziel überträgt

• Unter dem Begriff »Quelle« bzw. »Ziel« versteht man alle möglichen Ressourcen wie• Speicherpuffer,• Netzwerkverbindungen,• Tastatur,• Bildschirm• Drucker• usw..

Page 5: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

Datenströme in Java bearbeiten

• Die Java-Klassen für Binärdaten enden mit:

•..InputStream

..OutputStream

• Die Java-Klassen für Textdatenenden mit:

•..Reader

•..Writer

Page 6: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

Klassenhierachie

Page 7: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

Verknüpfung von StreamsLow- und Highlevel-Streams

Page 8: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26.04.23 Walther-Rathenau-Gewerbeschule 8

Dateien lesen und schreibenÜberblick

Page 9: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

Text-Dateien einlesen

Page 10: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

Text-Dateien schreiben

Page 11: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

Dateien byteweise einlesen

Page 12: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

Dateien byteweise schreiben

Page 13: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26.04.23 Walther-Rathenau-Gewerbeschule 13

Textdateien lesen und schreiben:File(Reader|Writer)

Page 14: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 14

Zeilenweise lesen mit FileReader

Page 15: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26.04.23 Walther-Rathenau-Gewerbeschule 15

Zeilenweise schreiben mit FileWriter

Page 16: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 16

Auf einmal lesen mit FileReader

• Mit FileReader kann der Inhalt von Textdateien auch auf einmal gelesen werden. Dazu wird der read()-Methode ein char-Array übergeben, in der die Zeichen eingelesen werden.

• Problem: Ein Array benötigt bei der Initialisierung immer eine Länge. Die length()-Methode der Klasse File liefert die Länge der Datei. Allerdings muss deren Rückgabewert vorher von long in int umgewandelt werden...

Page 17: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 17

In Datei schreiben mit PrintWriter

• PrintWriter eignet sich auch für andere Zielorte wie z. B. Daten über das Netzwerk verschicken. Die println()-Methode erzeugt nach jedem Schreiben automatisch einen Zeilenumbruch, so dass das Senden von "\n" unnötig ist.

• Da PrintWriter aber manchmal Daten zwischen-puffert bevor er sie versendet, kann mittels der flush()-Methode das Senden erzwungen werden. Für den Autoflush muss im Konstruktor true angegeben werden.

Page 18: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 18

Noch bequemer lesen mit Scanner

• Scanner kann Zeichenketten in sog. Tokens zerlegen. Mittels einem regulären Ausdruck kann der useDelimiter()-Methode angegeben werden, auf welche Weise die Daten getrennt werden sollen. Standardmäßig werden die Daten bei jedem Leerzeichen getrennt. Die readLine()-Methode arbeitet analog wie BufferedReader.

• Außerdem kann Scanner über viele Methoden wie nextInt(), nextDouble() usw. automatisch die Daten Konvertieren.

Wortweise lesen

Page 19: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26.04.23 Walther-Rathenau-Gewerbeschule 19

Aufgabe● Erstellen Sie eine Textdatei mit dem folgenden Inhalt:

Max;Mustermann;01.01.2000Hans;Peter;31.03.2010

● Lesen Sie anschließend die Daten aus der Datei● zeilenweise mit FileReader● auf einmal mit FileReader● wortweise mit Scanner

● Schreiben Sie eine weitere Zeile dazu● mit FileWriter● mit PrintWriter

Page 20: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26.04.23 Walther-Rathenau-Gewerbeschule 20

Byteweise lesen und schreiben:File(Inupt|Output)Stream

Page 21: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26.04.23 Walther-Rathenau-Gewerbeschule 21

Dateien byteweise einlesen und schreiben

Page 22: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26.04.23 Walther-Rathenau-Gewerbeschule 22

Daten über das Netwerk:Sockets

Page 23: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 23

Daten über das Netzwerk senden und empfangen

cp1252 ist das Symbolfür das Windows-Latin-1-Zeichensatz. D.h. dieempfangenen Datenwerden als Windows-Latin-1interpretiert und automatischin UTF8 umkonvertiert

Page 24: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 24

Serialisierung von Objekten

Page 25: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 25

Serialiserung

• Java-Objekte können beliebig komplex sein. Ein Objekt kann intern aus mehreren anderen Objekten (Objektgraph) bestehen.

• Möchte man nun ein Objekt über das Netzwerk verschicken oder in einer Datei abspeichern, so ist u. U. ein ganzer Objektgraph derart zu Serialiseren (“platt zu drücken”), dass später aus den serialiserten Daten das ursprüngliche Objekt (-graph) ohne Datenverlust rekonstruiert werden kann.

• Java bietet seit der Version 1 ein sehr einfaches Verfahren an, um Objekte zu Serialiseren bzw. zu Deserialiseren.

• Die zwei Klassen die dazu benötigt werden sind:• java.io.ObjectOutputStream.• java.io.ObjectInputStream

Page 26: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 26

Serialiserung

Page 27: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 27

Serialiserung

• Serialisierbare Klassen müssen das leere Interface Serializable implementieren.

• Ein (Pferd-)-Objekt wird mittels der writeObject-Methode eines ObjectOutputStreams serialisiert.

• ObjectOutputStreams benötigt ein OutputStream als Ziel. FileOutputStream wird für Serialisierung in Dateien verwendet. Es können an dieser Stelle auch beliebig andere OutputStream's, die Beispielsweise Ziele über das Netzwerk repräsentieren, verwendet werden.

• Die readObject()-Methode der Klasse ObjectInputStream de-serialisiert die empfangenen Daten wieder in Java-Objekte. Auch ObjectInputStream ist eine sog. High-Level-Klasse. Sie kann die Daten nur über übergebenenes InputStream (wie FileInputStream) lesen.

Page 28: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 28

Objektgraph

Die Klasse Halter muss das leereInterface Serializable implementieren.

Page 29: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 29

Objektgraph

Page 30: 25/07/2015Walther-Rathenau- Gewerbeschule 1 Ein- und Ausgabe in Java Packet: java.io

26/04/23 Walther-Rathenau-Gewerbeschule 30

Objektgraph Serialisieren

• Ein Objekt einer Klasse kann nur dann serialisiert werden, wenn sowohl die Klasse selbst als auch alle direkten und indirekten Klassen, mit denen die Klasse in Beziehung steht, das Serializable-Interface implementiert haben.

• Falls man nicht den Sourcecode einer Klasse heran kommt, um nachträglich das Serializable-Interface zu implementieren, so kann man am einfachsten eine neue Klasse von der nicht serialisierbaren Klasse erben lassen, die neue Klasse als Serializable markieren und statt der nicht serialisierbaren Superklasse verwenden.