在Java中,当数据在流或管道上可用时,是否可以通知通知

  • 本文关键字:通知 是否 Java 数据 管道 java io
  • 更新时间 :
  • 英文 :


我希望能够有一个线程等待一个或多个流/管道上的数据,然后进行民意调查阅读数据(然后再等待更多)

InputStream is = process.getInputStream() // stdout of process
is.setOnDataAvailable((stream)-> {
     readerThread.signal ... // tell thread to wake up or put worker task in queue
});
// reader thread
dataAvailable = true; // start assuming data there.
for(;;) {
    if(!dataAvailable) {
       waitForSignal();
    }
    dataAvailable = false;
    for(allINputs) {
       if(input.dataAvailable()) {
           read it and do something
           dataAvailable = true; // might be more check inputs again
       }
    }
}

标准Java IO API是阻止实现。换句话说,如果您的线程带有一个看起来像:

的循环
byte[] input = ...;
while (stream.read(input) != -1)
{
    ...
}

然后,该线程将阻止直到流从流(或流关闭,没有更多的数据等)读取的内容,从描述听起来像您想做什么。

此外,从您的代码看,您似乎要读取过程输出。确保您也从该过程中排出其他流(例如STDERR),否则您将超出限制并获得例外。

相关内容

  • 没有找到相关文章

最新更新