2010-11-19 152 views
12

我對這些流感到困惑......哪個是哪個?Java進程getInputStream與getOutputStream

簡單地說,我應該使用哪個流來捕獲我的Process的輸出,以及我應該使用哪個流來給我的Process輸入一些信息?

+4

討厭這個,真的令人困惑 – khachik 2010-11-19 19:58:40

回答

17

您只能從InputStream中讀取,因此請使用它來捕獲流程的輸出。

你寫信給OutputStream,所以用它來給你的輸入提供過程。

您正在使用在生成過程的上下文中有意義的名稱。但是API名稱在父進程的上下文中是有意義的。

以下是另一個提示:如果您的流程寫入標準錯誤,請務必閱讀。如果子進程的標準輸出或錯誤管道已滿(因爲您的父級Java進程沒有使用它們),子進程將阻塞其write()調用。

+7

我覺得很confising來,不是說有缺陷的。在提供這種方法的對象的上下文中,它不是一個核心的面向對象設計模式嗎? – rds 2011-12-07 15:52:33

3

getOutputStream是輸入的過程。 getInputStream的輸出是從讀取的過程。如果有幫助,請參考JavaDocs

7

我總是忽略名稱並查看返回的內容。如果你的代碼有一個OutputStream,你可以寫入它 - 這意味着它的輸入其他進程。如果你的代碼有InputStream,你可以從它讀取 - 這意味着它的輸出或其他進程的錯誤。

幸運的是,編譯器會告訴你,如果你在做錯誤的事情 - 你已經得到了你想要provde數據,因此你將它寫入流,這意味着它的到是OutputStream

0

看看文檔。與其他以「明顯」方式實現它的框架相比,這實際上完全是一團糟,所以文檔就是你的朋友。

public abstract OutputStream getOutputStream() 
> Gets the output stream of the subprocess. Output to the stream is piped into the standard input stream of the process 

本來應該過於簡單有:

public abstract InputStream getInputStream() 
> Gets the standarinput stream of the subprocess. Output to the stream is piped into the standard input stream of the process