STDIN/STDOUT是一次或一个字符地刷新数据吗?

问题描述:

我正在使用C#读取另一个程序的标准输出。如果我这样做:STDIN/STDOUT是一次或一个字符地刷新数据吗?

StreamReader reader = process.StandardOutput; 
reader.ReadToEnd(); 

是否保证将最后一件东西全部刷新到程序的STDOUT?或者有点像TCP,我必须有一个消息终止符或长度头?

默认情况下StandardOutput是缓冲的,这意味着您可能会从另一端(或多个整个消息)获得整个消息。但它并没有真正保证,尤其是因为你正在阅读的过程可能改变了StandardOutput的缓冲。

消息终止符将是找出它的最好方法。尽管通常通过StandardOutput进行通信的过程都是基于行的,所以仅仅使用换行符作为消息终止符可能是最简单和最常见的启动地点。

reader.ReadToEnd()在进程终止之前不会返回,所以在调用之后,您应该看到它写入标准输出的所有内容。缓冲只会影响从其他程序进入读卡器缓冲区的速度,但是您的代码无法区分(至少在此线程中),因为它仍在等待ReadToEnd()返回。