我怎么知道命名管道有数据要在linux上的java中读取

时间:2014-10-08 13:46:16

标签: java linux

我创建了一个名称管道,我想传达一个python进程和一个java进程。 Java进程是一个游戏过程。调用update函数时,我想检查命名管道是否有任何要读取的数据。但是如果我调用FileInputStream.read(),进程将阻塞。是否有任何阻止方法来检查管道可以读取的天气

2 个答案:

答案 0 :(得分:0)

您可以拨打available() method。如果它返回非零值,您可以读取那么多字节而不会阻塞。如果它返回零,则无法输入。

或者,不是重复检查输入是否可用,您可能对NIO Selector类感兴趣,它可以等待输入超时。 (但您需要将程序更改为使用NIO频道而不是InputStream。)

答案 1 :(得分:0)

简单方法:

启动单独的Thread,让Thread上的FileInputStream阻止并在读取时发出信号(可能是通过将数据读入QueueBlockingQueue

更复杂的方式:

(但更灵活,特别是如果您有多个输入源,您不想在_

上阻止

使用java.nio.channels.FileChannel打开命名管道,并使用java.io.channels.Selector轮询输入数据是否可用。