我正在使用C#讀取另一個程序的標準輸出。如果我這樣做:STDIN/STDOUT是一次或一個字符地刷新數據嗎?
StreamReader reader = process.StandardOutput;
reader.ReadToEnd();
是否保證將最後一件東西全部刷新到程序的STDOUT?或者有點像TCP,我必須有一個消息終止符或長度頭?
我正在使用C#讀取另一個程序的標準輸出。如果我這樣做:STDIN/STDOUT是一次或一個字符地刷新數據嗎?
StreamReader reader = process.StandardOutput;
reader.ReadToEnd();
是否保證將最後一件東西全部刷新到程序的STDOUT?或者有點像TCP,我必須有一個消息終止符或長度頭?
默認情況下StandardOutput是緩衝的,這意味着您可能會從另一端(或多個整個消息)獲得整個消息。但它並沒有真正保證,尤其是因爲你正在閱讀的過程可能改變了StandardOutput的緩衝。
消息終止符將是找出它的最好方法。儘管通常通過StandardOutput進行通信的過程都是基於行的,所以僅僅使用換行符作爲消息終止符可能是最簡單和最常見的啓動地點。
reader.ReadToEnd()
在進程終止之前不會返回,所以在調用之後,您應該看到它寫入標準輸出的所有內容。緩衝只會影響從其他程序進入讀卡器緩衝區的速度,但是您的代碼無法區分(至少在此線程中),因爲它仍在等待ReadToEnd()
返回。