Einführung in die Informatik – Algorithmen und Datenstrukturen
Thema 12 – Datenverarbeitung
Aufzeichnungen und Veröffentlichungen der Vorlesung sind aus urheberrechtlichen Gründen unzulässig!
Daten - Definitionen
Text?
Foto?
Zeichnung?
Musik?
Video?
Programm?
Daten, urspr. svw. geschichtl. Zeitangaben; heute allg. Bez. für die Zahlenwerte der Merkmalsgrößen von physikal.-techn. Objekten (Kenndaten), Ereignissen,
Prozessen und Abläufen (z. B. Betriebsdaten bei techn. Vorgängen und Geräten, Bahndaten der Bewegungen von Raumflugkörpern). In der Informatik sind D. durch Zeichenfolgen (digitale D.) oder kontinuierl. Funktionen (analoge D.) dargestellte Informationen oder Sachverhalte, die maschinell bearbeitet werden können.
(c) Meyers Lexikonverlag.
Ein- und Ausgabe in Java
Die Ein – und Ausgabekomponenten werden in Java im Package java.io zusammengefasst.
Mögliche Eingabequellen für Daten:
• Tastatur
• lokale Dateien
• Internet
Zum Einlesen von Daten stehen die Methoden der abstrakten Klasse InputStream und zur Ausgabe von Daten die Methoden der abstrakten Klasse OutputStream zur Verfügung.
Grundkonzept - Streams
Unter einem Stream versteht man eine Verbindung zwischen einem Programm und einer Datenquelle oder einem Datenziel. Die Verbindung verläuft dabei stets in einer Richtung.
Für die Eingabe muss ein Programm zunächst einen mit der Datenquelle verbundenen Stream öffnen und die ankommenden Informationen sequentiell lesen.
Für die Ausgabe muss das Programm erst einen Stream zu einem Datenziel öffnen und dann die Informationen sequentiell in den Stream schreiben.
Streams können als abstrakte unidirektionale Verbindungen eines Programms mit der „Außenwelt“ betrachtet werden
Streams in Java
In Java werden entsprechend der transportierten Daten zwei Klassen von Streams unterschieden:
Character-Streams – Zeichenströme
transportieren die Daten in Form von 16-Bit-Einheiten (Datentyp byte)
Die Basisfunktionalität wird durch die abstrakten Klassen Reader und Writer bereitgestellt.
Byte-Streams – Byteströme
transportieren die Daten in Form von 8-Bit-Einheiten (Datentyp char bzw. Unicode- Zeichen)
Die Basisfunktionalität wird durch die abstrakten Klassen InputStream und OutputStream bereitgestellt.
Eingabedatenverarbeitung
Intern werden von Java die Daten im Unicode-Format verarbeitet. Daten liegen häufig im ASCII-Code vor. Daher ist eine Konvertierung notwendig.
Pro- gramm
Stream:Bytes Reader:char DataInput:Daten
Bytes
Internet- Daten InputStraem
Unicode
Ziel: für jedes sinntragende Schriftzeichen oder Textelement aller bekannten Schriftkulturen und Zeichensysteme soll ein digitaler Code festgelegt werden.
Zeichen: Einzelne Codes von Unicode-Zeichen – „Codepoints“ genannt – werden hexadezimal mit vorangestelltem U+ dargestellt, z. B.
U+00DF für das ß.
Struktur: Unicode ist untergliedert in 17 Codebereiche zu jeweils 16 Bit bzw. 65.536 Zeichen, sogenannte Ebenen (engl. planes). Die
wichtigste Ebene ist die erste Ebene, die Basic Multilingual Plane (BMP, dt. Grundlegender mehrsprachiger Codebereich), auch Plane 0 genannt.
Unicode - Basic Multilingual Plane
Streams in Java - Konsolenausgabe
In Java stehen für die Streams vordefinierte Klassen zur Verfügung:
System.out.println()
In der abstrakten Klasse System enthält ein ist eine Klassenvariable mit dem Namen out vom Typ PrintStream definiert. In der Klasse PrintStream sind u.a. die überladenen Methoden println(), print() und printf() definiert.
Darstellung von Sonderzeichen:
Zeichen Bedeutung Zeichen Bedeutung
\‘ Hochkomma \“ Anführungszeichen
\\ Backslash \t Tabulator
\b Zeichen löschen \n Neue Zeile
Dateien und Verzeichnisse – Klasse File
Ein Ziel der Datenverarbeitung besteht darin, Daten permanent auf Datenträgern zu speichern und gespeicherte Daten zu lesen.
Im Paket java.io befindet sich die Klasse File, deren Objekte eine Datei oder ein Verzeichnis repräsentieren. Der Objektname entspricht dem logischen Dateinamen.
• public boolean canRead()
gibt true zurück, wenn das Fileobjekt für das Programm lesbar ist
• public boolean canWrite()
gibt true zurück, wenn das Fileobjekt für das Programm schreibbar ist
• public boolean createNewFile()
legt eine neue Datei mit dem Namen des File-Objektes an
• public boolean delete()
löscht die zum File-Objekt gehörende Datei
Methoden der Klasse File
• public boolean exists()
gibt true zurück, wenn das Fileobjekt existiert
• public String getName()
gibt den Namen des Fileobjektes zurück
• public boolean isDirectory()
gibt true zurück, wenn das File-Objekt ein Verzeichnis ist
• public boolean isFile()
gibt true zurück, wenn das File-Objekt eine Datei ist
• public long length()
gibt die Größe der Datei in Byte zurück
• public boolean mkdir()
legt ein neues Verzeichnis mit dem Namen des File-Objektes an
Dateneingabe unter Verwendung der Scanner-Klasse
Zur Eingabe von Daten über die Tastatur und aus Dateien kann ein Objekt der Klasse Scanner verwendet werden. Die Klasse befindet sich im Paket java.io.
• public String next()
Liefert das nächste abgeschlossene Token der Eingabe als String
• public int nextInt()
• public float nextFloat()
• public double nextDouble()
Liefert das nächste abgeschlossene Token der Eingabe als elementaren Datentyp
• public String nextLine() Liefert die nächste Eingabe als String.
• public boolean hasNext()
Liefert true, wenn noch ein weiteres Taken bereitsteht, bzw. noch nicht das Ende der Datei erreicht ist.
Eingabe über Character-Streams
• public abstract int read()
gibt das nächste Zeichen aus dem Reader-Objekt als int-Wert zurück.
• public int read(char[] c)
füllt das von c referenzierte Feld mit Zeichen (maximal c.length vile) aus dem Reader- Objekt und liefert die Anzahl der gelesenen Zeichen zurück
• public int read(char[] c, int off, int n)
füllt das von c referenzierte Feld ab dem Index off mit den nächsten n Zeichen aus dem Reader-Objekt und liefert die Anzahl der tatsächlich gelesenen Zeichen zurück
• public void close() schließt den Strom.
Die abstrakte Klasse Reader stellt für die Eingabe über Character-Streams u.a. folgende Methoden bereit
read liest ein Zeichen gibt jedoch einen Integer-Wert zurück
Ausgabe über Character-Streams
• public abstract void write(int c) schreibt das Zeichen c in das Writer-Objekt
• public void write(char[] c)
schreibt die im von c ref. Feld gespeicherten Zeichen in das Writer-Objekt
• public void write(char[] c, int off, int n)
schreibt die im von c ref. Feld gespeicherten n Bytes ab Index off in das Writer-Objekt
• public void write(String s)
schreibt die im im String s gespeicherten Zeichen in das Writer-Objekt
• public void write(String s, int off, int n)
schreibt die im String s gespeicherten n Zeichen ab Index off in das Writer-Objekt
• public void close() schließt den Strom
• public void flush()
leert einen ev. Puffer des Writer-Objektes durch die sofortige Abarbeitung aller noch anstehender Zeichen
Literatur
/BALZERT96/ Balzert, Helmut; Lehrbuch der Softwaretechnik; Spektrum Verlag, 1996 /BARNES09/ David J. Barnes, Michael Kölling
Java lernen mit BlueJ
Pearson Studium, 2009, ISBN-13: 978-3-86894-001-5 /HEROLD10/ Herold, Helmut; Lurz, Bruno; Wohlrab, Jürgen
Grundlagen der Informatik, Pearson Studium, 2007 ISBN 987-3-8273-7305-2
/LOUIS14/ Lois, Dirk; Müller, Peter
Java – eine Einführung in die Programmierung, Carl Hanser Verlag München, 2014
ISBN 987-3-8273-7305-2
/RATZ14/ Ratz, Dietmar; Scheffler, Jens; Seese, Detlef; Wiesenberger, Jan; Grundkurs Programmieren in JAVA (7. Auflage); Carl-Hanser-Verlag, München, Wien;
2014
ISBN 978-3-446-44073-9