Ich möchte aus den Ausgabe- und Fehlerströmen eines Prozesses lesen und sie in einen Textstrom zusammenführen. Mein Programm ist in groovy und liest sich so:
%Vor%Das Problem ist, dass ByteArrayOutputStream nicht threadsicher ist und waitForProcessOutput () zwei Threads generiert, die an mergeStream anhängen. Gibt es eine Thread-sichere Variante, die ich verwenden kann? Wie sonst empfehlen Sie, dass ich den Zugriff auf mergeStream kontrolliere? Es sieht so aus, dass in der Praxis Zeichen manchmal mit dieser Implementierung fallengelassen werden.
Wenn für process.waitForProcessOutput()
ein OutputStream
als Argument verwendet wird, können Sie einfach eine benutzerdefinierte Implementierung von OutputStream
verwenden, bei der alle Methoden synchronisiert sind, und an die entsprechende Methode eines umgebrochenen ByteArrayOutputStream
delegieren. Genauso wie Collections.synchronizedList()
eine andere Liste in einen synchronisierten Listen-Proxy einbindet.
BEARBEITEN:
Wenn wir die Quelle von ByteArrayOutputStream lesen, sind alle Methoden bereits synchronisiert, also ist es bereits Thread-sicher. Ihr Fehler kommt wahrscheinlich von woanders.