„Hallo Amigo! Heute wirst du etwas Neues lernen: wie du das System.out-Objekt ersetzt.“
System.out ist eine statische PrintStream-Variable namens out in der System-Klasse. Diese Variable hat den Modifikator final, also weist du ihr einfach einen neuen Wert zu. Die System-Klasse verfügt jedoch über eine spezielle Methode, um dies zu tun: setOut(PrintStream stream). Und genau das werden wir nutzen.
„Interessant. Und durch was werden wir sie ersetzen?“
„Wir brauchen ein Objekt, das die Ausgabedaten sammeln kann. ByteArrayOutputStream ist für diese Aufgabe bestens geeignet. Dies ist eine spezielle Klasse, die ein dynamisches (in seiner Größe veränderbares) Array ist und das OutputStream-Interface implementiert
„Ein Adapter zwischen einem Array und OutputStream?“
„Sowas in der Art. So sieht unser Code aus.“
public static void main(String[] args) throws Exception
{
//Aktuellen PrintStream in einer speziellen Variablen speichern
PrintStream consoleStream = System.out;
//Dynamisches Array erstellen
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//Adapter für die PrintStream-Klasse erstellen
PrintStream stream = new PrintStream(outputStream);
//Als aktuelles System.out festlegen
System.setOut(stream);
//Eine Funktion aufrufen, die nichts von unseren Veränderungen weiß
printSomething();
//In unser ByteArray geschriebene Daten in eine Zeichenkette umwandeln
String result = outputStream.toString();
//Alles wieder so einrichten, wie es war
System.setOut(consoleStream);
}
public static void printSomething()
{
System.out.println("Hi");
System.out.println("Mein Name ist Amigo");
System.out.println("Auf Wiedersehen!");
}
„Und was machen wir mit dieser Zeile?“
„Na, was immer wir wollen. Wir können sie zum Beispiel umkehren. Dann würde der Code wie folgt aussehen:“
public static void main(String[] args) throws Exception
{
//Aktuellen PrintStream in einer speziellen Variablen speichern
PrintStream consoleStream = System.out;
//Dynamisches Array erstellen
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
//Adapter für die PrintStream-Klasse erstellen
PrintStream stream = new PrintStream(outputStream);
//Als aktuelles System.out festlegen
System.setOut(stream);
//Eine Funktion aufrufen, die nichts von unseren Veränderungen weiß
printSomething();
//In unser ByteArray geschriebene Daten in eine Zeichenkette umwandeln
String result = outputStream.toString();
//Alles wieder so einrichten, wie es war
System.setOut(consoleStream);
//Zeichenkette umkehren
StringBuilder stringBuilder = new StringBuilder(result);
stringBuilder.reverse();
String reverseString = stringBuilder.toString();
//Ausgabe auf der Konsole
System.out.println(reverseString);
}
public static void printSomething()
{
System.out.println("Hi");
System.out.println("Mein Name ist Amigo");
System.out.println("Auf Wiedersehen!");
}
„Sehr interessant! So langsam verstehe ich, welche großartigen Möglichkeiten diese kleinen Klassen bereithalten.“
„Danke für die interessante Lektion, Bilaabo.“
GO TO FULL VERSION