Ich habe ein wenig gekämpft, um zu versuchen, IO zu blockieren, wenn ich einen externen Befehl viele verschiedene Male ausführe.Lesen von der Ausgabe eines Prozesses in ein ByteArray
Ich war endlich in der Lage, es zum Laufen zu bringen (nach dem Lesen vieler Seiten, versuchen verschiedene Methoden, von denen viele zu Blockierung io).
Meine aktuelle Lösung (unten) funktioniert. Aber ich muss das ByteArray mit der Ausgabe (newArray) vordefinieren und ich muss ihm eine Größe geben. Das Problem ist, wenn ich es eine feste Größe geben (sagen wir 1000), liest es nur die ersten 1000 Bytes. Mein Problem scheint zu scoping und mein schlechtes Verständnis der Unveränderlichkeit von Arrays. Gibt es eine sauberere Möglichkeit, die Ausgabe des Befehls in ein Bytearray zu lesen, das so stark wie nötig wächst?
Oder gibt es eine bessere Möglichkeit, den InputStream in ein byteArray newBytes zu konvertieren?
bytes is a predefined byteArray
var newBytes = new Array[Byte](bytes.length);
def readJob(in: InputStream) {
newBytes = Stream.continually(in.read).takeWhile(_ != -1).map(_.toByte).toArray
in.close();
}
def writeJob(out: OutputStream) {
out.write(bytes)
out.close()
}
val io = new ProcessIO(
writeJob,
readJob,
_=>())
val pb = Process(command)
val proc = pb.run(io)
val exitCode = proc.exitValue // very important, so it waits until it completes
Dank Sie sehr viel im Voraus für jede Hilfe
Danke. Genau das habe ich gebraucht – dmg