我创建了一个名称管道,我想传达一个python进程和一个java进程。 Java进程是一个游戏过程。调用update函数时,我想检查命名管道是否有任何要读取的数据。但是如果我调用FileInputStream.read(),进程将阻塞。是否有任何阻止方法来检查管道可以读取的天气
答案 0 :(得分:0)
您可以拨打available()
method。如果它返回非零值,您可以读取那么多字节而不会阻塞。如果它返回零,则无法输入。
或者,不是重复检查输入是否可用,您可能对NIO Selector
类感兴趣,它可以等待输入超时。 (但您需要将程序更改为使用NIO频道而不是InputStream
。)
答案 1 :(得分:0)
简单方法:
启动单独的Thread
,让Thread
上的FileInputStream
阻止并在读取时发出信号(可能是通过将数据读入Queue
或BlockingQueue
。
更复杂的方式:
(但更灵活,特别是如果您有多个输入源,您不想在_
上阻止使用java.nio.channels.FileChannel
打开命名管道,并使用java.io.channels.Selector
轮询输入数据是否可用。