0
当我在许多不同的时间执行一个外部命令时,我一直在努力试图阻止IO。从一个进程的输出读取字节数组
我终于能够得到它的工作(阅读很多页面后,尝试 不同的方法,其中许多导致阻止io)。
我目前的解决方案(如下)工作。但是我必须预先定义byteArray和输出(newArray),我必须给它一个大小。问题是, 当我给它一个固定的大小(比如1000)时,它只读取前1000个字节。 我的问题似乎是范围和我对数组不变性的理解。有没有更清晰的方法来读取命令的输出成为一个增长尽可能多的字节数组?
或者,有没有更好的方法来将InputStream转换为byteArray newBytes?
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
谢谢你提前很多的任何帮助
谢谢。这正是我需要的 – dmg