Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Standard Streams

&pagelevel(3)&pagelevel

Die Klasse java.lang.System stellt drei Standard Streams in, out und err zur Verfügung. Analog zur Lösung im OS/390 sind diese Standard Streams in JENV „Localized Streams“. Damit ist im BS2000 eine normale Text- Ein-/Ausgabe über diese Streams möglich.

Dies kann selektiv für jeden der drei Ströme eingestellt werden, indem beim Programmstart die folgenden System-Properties versorgt werden:

System.in     -Djava.localized.in=... 
System.out    -Djava.localized.out=... 
System.err    -Djava.localized.err=... 

Die Ströme werden nicht modifiziert, wenn die Erweiterung für „Localized Streams“ abgeschaltet ist (-Djava.localized.streams=False). Ein späteres Setzen oder Ändern dieser System-Properties bleibt für die aktuell eingestellten Standard-Ströme ebenfalls wirkungslos.

Folgende Werte können angegeben werden:

Default


Die Original-Ströme (die beim Programmstart eingestellt sind) werden lokalisiert.
Das ist die Voreinstellung.

Full

Sowohl die Original-Ströme, als auch die später mit setIn() usw. gesetzten Standardströme werden lokalisiert.

None


Die Standardströme werden nicht modifiziert.

Soll eine Anwendung die Methoden setIn(), setOut() oder setErr() benutzen, um eigene Streams zuzuweisen, so gibt es zwei Möglichkeiten für einen korrekten Ablauf: Entweder es wird dafür gesorgt, dass die Standard-Streams immer „Localized Streams“ (also Text-Streams) sind, oder es wird bei der Verwendung der Standard-Streams auf eine saubere Unterscheidung zwischen Text- und Binär-Ein-/Ausgabe geachtet. Das folgende Beispiel zeigt die Anwendung beider Möglichkeiten.

Die zweite Lösung ist dabei die bessere. So sollte grundsätzlich mit den Standard-Streams gearbeitet werden. Die erste Lösung kann aber notwendig sein, wenn mit bereits existierenden Java-Klassen gearbeitet werden muss, die nicht portabel implementiert wurden.


Beispiel

Der folgende Code (den man ähnlich unter den Demo-Programmen von JavaSoft finden kann) würde zu einer binären Ein-/Ausgabe über diese Ströme führen und damit zu unlesbaren Ausgabedateien oder einer möglichen Fehlinterpretationen der Eingabe, falls eigentlich Text Ein-/Ausgabe gemeint war.

... 
public static String read_write() { 
     StringBuffer buf = new StringBuffer(80); 
     int c; 
     try {
          while ((c = System.in.read()) != -1) { 
               char ch = (char) c; 
               System.out.write(c); 
               if (ch == '\n') 
                   break; 
               buf.append(ch); 
          } 
     catch (IOException e) { 
           System.err.println(e); 
                           } 
     return (buf.toString()); 
} 
... 
System.setIn(new FileInputStream("myinputfile")); System.setOut(new 
PrintStream(new FileOutputStream("myoutputfile")));
... 
line = read_write(); 
...

Das folgende Programm-Fragment zeigt die erste Lösung: die Standard-Streams sind immer „Localized Streams“ (also Text-Streams). Diese Lösung wäre vom Aufrufer zu realisieren.

...
System.setIn(com.fujitsu.ts.java.io.LocalizedInputStream.
localize (new FileInputStream("myinputfile"))); 
System.setOut(com.fujitsu.ts.java.io.LocalizedPrintStream.
localize (new FileOutputStream("myoutputfile"))); 
... 
line = read_write(); 
...

Das Programm-Fragment der zweiten Lösung könnte so aussehen und wäre vom Nutzer der Standard-Streams zu implementieren: bei der Verwendung der Standard-Streams wird auf eine saubere Unterscheidung zwischen Text- und Binär-Ein-/Ausgabe geachtet.

... 
public static String read_write() { 
   StringBuffer buf = new StringBuffer(80); 
   int c; 
   InputStreamReader in = new InputStreamReader(System.in); 
   OutputStreamWriter out = new          OutputStreamWriter(System.out); 
try { 
        while ((c = in.read()) != -1) { 
          char ch = (char) c; 
          out.write(c); 
          if (ch == '\n') 
              break; 
          buf.append(ch);
      } 
} catch (IOException e) { 
         System.err.println(e); 
      } 
 return (buf.toString()); 
} 
...