25.2 Die Klassen DataInputStream und DataOutputStream
 
Komfortableres Auslesen eines InpuStreams

Download:
lies3.java

Will man mit den bisher kennen gelernten Mitteln einen Satz aus einer Eingabe-Pipeline auslesen, müssen wir schon einen größeren Aufwand treiben:
import java.io.*;

public class Lies3 {

  public static void main(String[] args) throws IOException{

    String satz="";

    char z;

    do {

      z = (char)System.in.read();

      satz += z;

    } while(z!='.');//Die Eingabe-Pipieline wird bis zum 

                    //Punkt ausgelesen. 

    System.out.println(satz);

  }

}
  Wieder blockiert die read()-Methode das Javaprogramm bis die Eingabe in die Eingabe-Pipeline abgeschlossen ist. Da es sich um einen Satz handelt gibt man vor dem Drücken der Eingabetaste noch den Punkt als Schlusssatzzeichen ein. Danach lest read() aus der Pipeline 1 Byte große Blöcke, liefert an das Programm diese Werte als int interpretiert, die nach einem expliziten Cast in ein char-Variablen abgelegt werden. Mit ihnen wird dann der String satz aufgebaut. Die Ausgabe ist dann einfach, da wir die Variante println(String text) benutzen, die einen ganzen String in die Ausgabe-Pipeline einspeist, der vom System wieder in 1 Byte große Pakete ausgelesen als ASCII-Code interpretiert und schließlich als Zeichen auf den Bildschirm ausgegeben wird.
 
  Eine elegantere Art für das Einlesen steht uns mit der Klasse DataInputStream zur Verfügung. Für Ausgabeströme steht in der Klasse DataOutputStream eine Entsprechung zur Verfügung.
 
 
  Objekte dieser neuen Ströme funktionieren so, dass man ihnen die Objekte System.out bzw. System.in übergibt. Die Klassen DataInputStream und DataOutputStream stellt ihren Objekten komfortablere Methoden zur Verfügung.
Download:
Lies4.java
import java.io.*;

public class Lies4 {

  public static void main(String[] args) throws IOException {

    DataInputStream eingabe = new DataInputStream(System.in);

    String satz = eingabe.readLine();

    System.out.println(satz);

  }

}
  Die Methode readLine() der Klasse DataInputStream ist in ihrer Funktionalität der read()-Methode der Klasse InputStream nachgebaut, liest aber den kompletten Inhalt aus der Eingabe-Pipeline und liefert ihn als ein String-Objekt an das aufrufende Javaprogramm..
 
  Java ist toll.
Java ist toll.
 
  Wieder rührt der erste Satz vom Echo des Systems her, während der zweite aus dem von Java gefüllten Ausgabestrom stammt.
 
  Analog könnte man auch den Ausgabestrom organisieren:
 
Download:
Lies5.java
import java.io.*;

public class Lies5 {

   public static void main(String[] args) throws IOException {

      DataInputStream eingabe = new DataInputStream(System.in);

      DataOutputStream ausgabe = new DataOutputStream(System.out);

      String satz = eingabe.readLine();

      ausgabe.writeBytes(satz);

      ausgabe.close();

   }

}
  Die Methode, die ein String-Objekt in den Ausgabestrom ausgabe ist writeByte(String text). Das Wort Byte im Methodennamen unterstreicht, dass das Auslesen aus dem Ausgabestrom in 1 Byte großen Blöcken geschieht. DDie Methode close()schließt den Ausgabestrom und gibt ihn frei, so dass das Rechnersystem die Daten aus der Ausgabe-Pipeline auslesen und auf dem Bildschirm darstellen kann.
 
zu 25.3 Schreiben in eine Datei und Lesen aus einer Datei
zur Startseite www.pohlig.de  (C) MPohlig 2005