2014-10-08 51 views
0

我創建了一個名稱管道,我想溝通一個python進程和一個java進程。 Java過程是一個遊戲過程。當更新函數被調用時,我想檢查命名管道是否有任何要讀取的數據。但是如果我調用FileInputStream.read(),過程將會阻塞。是否有任何疏通的方式來檢查管道可以讀取的天氣我怎樣才能知道一個命名管道有數據讀取在Linux上的java

回答

0

您可以撥打available() method。如果它返回一個非零值,你可以讀取很多字節而不會阻塞。如果它返回零,沒有輸入可用。

或者,您可能不希望重複檢查輸入是否可用,而是可能對NIO Selector類感興趣,該類可等待帶有超時的輸入。 (但是,你需要改變你的程序中使用NIO通道而不是InputStream的。)

0

簡單的方法:

啓動一個單獨的Thread,讓在FileInputStreamThread塊和信號時,它已經閱讀(或許通過將數據在QueueBlockingQueue已經閱讀

更復雜的方式:

(但更靈活,特別是如果您有多個不想阻止的輸入源時)。

使用java.nio.channels.FileChannel打開命名管道,並使用java.io.channels.Selector輪詢輸入數據變爲可用。

相關問題