4

所以我有一个使用 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/因为你必须执行类似的操作STDERRORNuProcess

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

4

0 回答 0