我正在嘗試運行一個進程並使用其輸入,輸出和錯誤流進行操作。最顯而易見的方法做,這是使用類似select()
,但我能找到在Java中,做的唯一的事情是Selector.select()
,這需要一個Channel
。這似乎並不可能得到來自InputStream
或OutputStream
(FileStream
有getChannel()
方法,但是,這並不在這裏幫助)如何處理Java中的多個流?
所以一個Channel
,而不是我寫了一些代碼來查詢所有流:
while(!out_eof || !err_eof)
{
while(out_str.available())
{
if((bytes = out_str.read(buf)) != -1)
{
// Do something with output stream
}
else
out_eof = true;
}
while(err_str.available())
{
if((bytes = err_str.read(buf)) != -1)
{
// Do something with error stream
}
else
err_eof = true;
}
sleep(100);
}
它的工作原理,但它永遠不會終止。當一個流到達文件的末尾,available()
返回零所以read()
不叫,我們從來沒有得到回報-1將指示EOF。
一個解決方案是,以檢測EOF無阻塞方式。我無法在任何地方看到文檔。或者,有沒有更好的方式來做我想做的事情?
我看到這個問題在這裏: link text ,雖然它並不完全做我想做的,我也許可以使用這個想法,產卵單獨的線程爲每個數據流,爲特定的問題,我現在有。但當然,這不是唯一的方法嗎?當然,必須有一種方法可以從多個流中讀取,而無需爲每個流使用線程?