Heim >Java >javaLernprogramm >Wie verarbeitet man Eingabe-/Ausgabeströme in Java-Prozessen zuverlässig?
In diesem Artikel werden die Feinheiten der Verwendung von Eingabe- und Ausgabestreams bei der Arbeit mit Java-Prozessen untersucht. Wir werden uns insbesondere auf die Lösung von Herausforderungen konzentrieren, die bei der Aufrechterhaltung der Funktionalität dieser Streams auftreten.
Das bereitgestellte Codebeispiel veranschaulicht ein Szenario, in dem Befehle in die Bash-Shell eingegeben werden können und die daraus resultierende Ausgabe erfolgt wiederholte sich. Allerdings treten nach dem ersten Lesevorgang Probleme auf, die dazu führen, dass nachfolgende Ausgabeströme nicht mehr funktionieren. Ziel dieses Artikels ist es, diese Probleme zu erläutern und Lösungen vorzuschlagen.
Der erste Schritt besteht darin, das Code-Snippet zu ändern, um die ProcessBuilder-Klasse zu nutzen, was die externe Prozessausführung vereinfacht. Sein Hauptvorteil ist die Möglichkeit, den Standardfehlerstrom des untergeordneten Prozesses in seine Standardausgabe umzuleiten.
ProcessBuilder builder = new ProcessBuilder("/bin/bash"); builder.redirectErrorStream(true); Process process = builder.start();
Außerdem neigen die Schleifen, die für das Lesen der Standardausgabe des Prozesses verantwortlich sind, zum Hängen, da sie erst am Ende beendet werden -of-file vom Reader. Um dieses Problem zu lösen, wird eine Technik mit einer „magischen“ Linie eingesetzt, um den Abschluss der Ausgabe des Shell-Befehls abzugrenzen.
while (scan.hasNext()) { String input = scan.nextLine(); writer.write("((" + input + ") && echo --EOF--) || echo --EOF--\n"); writer.flush(); line = reader.readLine(); while (line != null && ! line.trim().equals("--EOF--")) { System.out.println ("Stdout: " + line); line = reader.readLine(); } if (line == null) { break; } }
Es ist unbedingt erforderlich, die Einschränkungen dieses Ansatzes anzuerkennen :
Die in diesem Artikel beschriebenen Änderungen bieten eine umfassende Lösung für die Herausforderungen, die bei der Aufrechterhaltung der Funktionalität von Eingabe-/Ausgabeströmen bei der Arbeit mit Java-Prozessen auftreten. Obwohl die Technik gewisse Einschränkungen aufweisen kann, bietet sie eine zuverlässige Möglichkeit, Shell-Befehle auszuführen und ihre Ausgabe regelmäßig über eine geplante Aufgabe abzurufen.
Das obige ist der detaillierte Inhalt vonWie verarbeitet man Eingabe-/Ausgabeströme in Java-Prozessen zuverlässig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!