所以我有一个使用 Java 的当前项目,Process
我试图用 NuProcess 替换它(即https://github.com/brettwooldridge/NuProcess)。为了处理 JavaProcess
的 STDOUT/STDERROR,您有一个InputStream
并且由于 Monix 提供了一个方便的 interopt 方法Observable.fromInputStream
,这使您可以轻松地创建一个Observable[String]
/ Observable[Array[Byte]]
。
但是问题是它NuProcess
不适用于InputStream
,而是使用 javas NIO ByteBuffer
。除此之外,它稍微复杂一些,因为它使用事件处理机制,即在 Monix 任务中收听STDOUT
/因为你必须执行类似的操作STDERROR
NuProcess
nuProcess.setProcessHandler(new NuProcessHandler {
override def onStderr(buffer: ByteBuffer, closed: Boolean) = {
if (!closed) {
val bytes = new Array[Byte](buffer.remaining())
buffer.get(bytes)
// Do something else here
}
}
override def onStdout(buffer: ByteBuffer, closed: Boolean) = {
if (!closed) {
val bytes = new Array[Byte](buffer.remaining())
buffer.get(bytes)
// Do something else here
}
}
})
所以问题是你如何将它连接到一个可观察的(即一个Observable[String]
或Observable[Array[Byte]]
没有效率低下?
请注意,我使用的是 Monix 3.x