2017-07-19 54 views
0

我想將一些輸入字符串設置爲stdin,以便另一個進程可以讀取stdin作爲輸入。我用Java BufferedWriter。但是,如果輸入字符串大於管道大小或其他進程不讀取,我該如何處理這種情況?是否有API來檢查管道是否可用於寫入?Java BufferedWriter.write

+0

爲什麼,你得到一個錯誤? –

+0

該進程應該從stdin中主動讀取,這將清除緩衝區中的空間。正如馬丁所說,你在這裏遇到了一個問題嗎? – dimo414

+0

不是,但只是爲了積極主動,因爲我得到了一個代碼審查反饋,說如果沒有人閱讀它,寫入將被阻止 – JennyS

回答

1

但我怎麼處理的情況下,當輸入字符串比管道尺寸

你不必做大。它會阻塞,直到空間可用。

或其他進程不讀取?

再次,您將阻止,直到空間可用。如果其他進程沒有讀取,那是另一個進程中的一個錯誤。

是否有API來檢查管道是否可用於寫入?

不。這是Java阻塞的I/O。它阻止。 Java不提供任何其他方式來寫入進程的輸入,或查看阻塞寫入是否會阻塞。

我有一個代碼審查反饋說寫會如果沒有一個是從它

讀取被阻塞,這是正確的,但他們怎麼指望你做什麼呢?它阻止了I/O,這就是它的工作原理。問問他們他們期望你怎麼做。

NB stdin是輸入的名稱,而不是輸出的名稱。不要將輸入的名稱用於輸出流。它被輸入到另一個進程,但輸出給你的。我不會稱之爲stdout,它不是你的stdout。如果需要更多的特殊性,我只會將其稱爲outprocessOut