Einführung

Motivation

  • In klassischen Programmiersprachen ist Eingabe/Ausgabe (input/output) (I/O) Teil der Sprache
  • In modernen Programmiersprachen wird IO in Bibliotheken ausgelagert
    • Sockets
    • Pipes
    • Dateien
    • HTTP
  • Häufig sind die Schnittstellen für die verscheiden Datenquellen sehr unterschiedlich

In Java ist die Ein- und Ausgabe (I/O) nicht Teil der Programmiersprache, sondern der Bibliothek. Dies hat den Vorteil, dass man die Bibliotheksfunktionen austauschen kann, was in Java bereits passiert ist: Es gibt neben den normalen I/O-Funktionen, zwei weitere (NIO und NIO2), die für spezielle Aufgabenstellungen besser geeignet sind.

Beispiel: Datei in C öffnen

/* fopen example */
#include <stdio.h>
int main ()
{
  FILE * pFile;
  pFile = fopen ("myfile.txt", "w");
  if (pFile!=NULL)
  {
    fputs ("fopen example",pFile);
    fclose (pFile);
  }
  return 0;
}

Das Beispiel zeigt, wie man eine Datei in der Programmiersprache C öffnet, den Text „fopen example“ hineinschreibt und danach wieder schließt.

Eingabe/Ausgabe in Java

  • Java verwendet ein einheitliches Konzept für (nahezu) alle IO-Operationen: Streams (Ströme)
  • Sie liefern bzw. konsumieren die Daten in sequentieller Form
  • Man unterscheidet
    • Input Streams – Das Programm liest Bytes von einer Quelle
    • Output Streams – Das Programm schreibt Bytes in ein Ziel
    • Reader – Wie InputStream nur für Zeichen statt Bytes
    • Writer – Wie OutputStream nur für Zeichen statt Bytes

Man wollte in Java vollkommen davon abstrahieren, woher die Daten stammen, die man im Programm verarbeitet. Aus diesem Grund hat man sich für ein Konzept entschieden, das Streams heißt: Die Daten werden als Ströme von Bytes oder Zeichen verarbeitet. Die Quellen oder Senken der Daten sind dabei unerheblich und können, ohne Änderungen am Quelltext des Verwenders, geändert werden. So kann man mit denselben Befehlen Daten von der Festplatte, vom Netzwerk oder aus einem anderen Prozess lesen. Die Operationen bleiben gleich, da alle diese Quellen die Daten als Folge von Bytes (oder Zeichen) anliefern können.

Die Streams werden aus der Sicht des Programms benannt:

  • Daten in das Programm liefern die InputStreams und Reader.
  • Daten aus dem Programm speichern die OutputStreams und Writer.

Copyright © 2025 Thomas Smits