2015-10-26 32 views
1

我在寫一個Java程序,它通過ProcessBuilder訪問一個已編譯的C++程序。 C++程序需要一段時間才能「啓動」,但一旦完成,C++程序可以快速獲取文本字符串並獲取輸出(當前正在寫入文本文件)。在Java中輸入各種字符串到相同的進程

從本質上講,有沒有辦法讓運行進程「等待」輸入給它,而不是在啓動時輸入輸入源?我不希望每次用戶輸入一個字符串都必須重新啓動一個進程,因爲這會花費太長時間並且是不必要的。同時,我想開始這個過程,讓它「準備就緒」,然後提示用戶輸入。只要用戶這樣做,我想將該輸入發送到正在運行的進程,收集輸出並呈現該輸入。這可能嗎?

謝謝!

+0

如果C++程序沒有得到「文本串」,它會做什麼? – Steephen

+0

它只是等待輸入,直到它收到一些東西。它接收到輸入後,會輸出另一個基於輸入的字符串,我正在捕獲它。在此之後,它又回到等待另一個輸入。接收輸入和生成輸出花費的時間很少,但啓動過程需要一段時間。這就是爲什麼我希望能夠啓動一次流程並讓它「等待」,然後在用戶輸入時使用多個輸入來ping它,而不必重新初始化C++程序。 – Sam

+0

那麼你更喜歡睡cpp進程查詢輸入字符串的過程? – Steephen

回答

0

如果您希望Java程序「等待」C++,則需要某種方式讓C++程序告訴Java程序它已準備就緒。您可以通過從C++程序的輸出流向Java程序發送消息來執行此操作,並讓Java程序等待,直到它在它自己的輸入流上讀取某些內容,然後提示用戶輸入。

另一方面,Java程序等待的唯一原因是整型。如果你的所有通信都是在流上發生的,那麼Java程序可以隨時開始向C++發送字符串,並且一旦C++完成啓動,C++就會從輸入流中讀取這些字符串。沒有Java程序等待意味着用戶輸入和接收輸出之間的時間可能會更長,但啓動C++程序和接收輸出之間的總時間實際上可能會減少。

+0

感謝您的回覆!我想知道是否有某種方法將多個字符串發送到C++程序?等待不是化妝品; Java程序必須等待用戶輸入一個字符串。本質上,我想知道是否可以創建一個ProcessBuilder或類似的東西,可以在啓動該過程之後給出輸入,而不是之前。 – Sam

+0

使用ProcessBuilder創建Process後,可以使用Process的輸入和輸出流在兩個程序之間來回發送儘可能多的字符串。只要兩個程序繼續運行,字符串的數量或字符串之間的等待時間就沒有限制。 –

+0

這很有道理!非常感謝! – Sam

相關問題